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