File: Test019.ML

package info (click to toggle)
polyml 5.7.1-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 40,616 kB
  • sloc: cpp: 44,142; ansic: 26,963; sh: 22,002; asm: 13,486; makefile: 602; exp: 525; python: 253; awk: 91
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

;