File: Test019.ML

package info (click to toggle)
polyml 5.6-8
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 31,892 kB
  • ctags: 34,453
  • sloc: cpp: 44,983; ansic: 24,520; asm: 14,850; sh: 11,730; makefile: 551; exp: 484; python: 253; awk: 91; sed: 9
file content (27 lines) | stat: -rw-r--r-- 620 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(* This was reported as a bug in several implementations which failed to detect a
   type error.  Poly/ML correctly detects it but I'm including this in the regression
   set just to make sure we don't accidentally allow it in the future. *)

structure S:
   sig
      val f: 'a option -> 'a option
   end =
   struct
      val make: unit -> 'a option -> 'a option =
     fn () =>
     let
        val r: 'a option ref = ref NONE
     in
        fn z => (!r before (r := z))
     end
      val f = make ()
   end

val _ = S.f (SOME 13)

val _ =
   case S.f (SOME (fn z => z)) of
      NONE => 15
    | SOME f => f 17

;