File: Test047.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 (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;