File: Test047.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 (28 lines) | stat: -rw-r--r-- 654 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
28
(* Datatypes with a single constructor are normally represented as the value,
   i.e. the contructor is an identity function.  We optimise the case of
   constructors of tuples so that B values are triples containing the
   tag, a and b.  We MUSTN'T do that for ref. *)
datatype 'a t = T of 'a

type q = {a: string, b: string};

datatype s = A | B of q t | C of int;

let
    val x = B(T{a="O", b="K"})
    val B(T{a,b}) = x
in
    a^b
end;

datatype s = A | B of q ref | C of int;

let
    val x = B(ref{a="WRO", b="NG"})
    val B r = x
    val _ = r := {a="O", b="K"}
    val B(ref{a,b}) = x
in
    if a^b = "OK" then () else raise Fail "Wrong"
end;