10 functor CList (structure F
: MLTON_FINALIZABLE
11 structure P
: MLTON_POINTER
14 val cons
: int * P
.t
-> P
.t
22 fun cons (n
: int, l
: t
) =
26 val c
= F
.new (Prim
.cons (n
, w
'))
27 val _
= F
.addFinalizer (c
, Prim
.free
)
28 val _
= F
.finalizeBefore (c
, l
)
35 val c
= F
.new (Prim
.sing n
)
36 val _
= F
.addFinalizer (c
, Prim
.free
)
41 fun sum c
= F
.withValue (c
, Prim
.sum
)
44 functor Test (structure CList
: CLIST
48 val collect
: unit
-> unit
57 val a
= Array
.tabulate (n
, fn i
=> i
)
58 val _
= Array
.sub (a
, 0) + Array
.sub (a
, 1)
64 val l
= CList
.cons (2,l
)
65 val l
= CList
.cons (2,l
)
66 val l
= CList
.cons (2,l
)
67 val l
= CList
.cons (2,l
)
68 val l
= CList
.cons (2,l
)
69 val l
= CList
.cons (2,l
)
70 val _
= MLton
.GC
.collect ()
72 val _
= print (concat
["listSum(l) = ",
73 Int.toString (CList
.sum l
),
75 val _
= MLton
.GC
.collect ()
80 CList (structure F
= MLton
.Finalizable
81 structure P
= MLton
.Pointer
84 val cons
= _import
"listCons": int * P
.t
-> P
.t
;
85 val free
= _import
"listFree": P
.t
-> unit
;
86 val sing
= _import
"listSing": int -> P
.t
;
87 val sum
= _import
"listSum": P
.t
-> int;
90 structure S
= Test (structure CList
= CList
91 structure MLton
= MLton
)