blob: 957f681a57ae8d91c381c861ecf55f689c6bcdf5 [file] [log] [blame] [edit]
alloc : [x]. Unit -> rec t { l: < Nil Unit | Cons { data: x, rest: t }# > take };
map : [a,b]. { list: rec t { l: < Nil Unit | Cons { data: a, rest: t }# > }!, f: (a -> b) }#
-> rec t { l: < Nil Unit | Cons { data: b, rest: t }# >};
map l =
take l2 { list = node } = l in
take l3 { f = fun } = l2 in
take node2 { l = head } = node in
case head of
Nil u ->
let newNode = alloc Unit in
put newNode.l := Nil Unit end
end
| v2 -> case v2 of
Cons remaining ->
take remaining2 { data = x } = remaining in
let newNode = alloc Unit in
put newNode.l :=
Cons {
data = fun x,
rest = map { list = remaining2.rest, f = fun }
} end
end
end
end
end
end
end
end;