| 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; |