language-ats-1.7.4.0: test/data/finger-tree.out
datatype list(a: t@ype+) =
| cons of (a, list(a))
| nil
fun concat {a:t@ype+} (list(a), list(a)) : list(a)
typedef digit(a: t@ype+) = list(a)
datatype node(a: t@ype) =
| node2 of (a, a)
| node3 of (a, a, a)
datatype finger_tree(a: t@ype+) =
| empty
| single of (a)
| deep of (digit(a), finger_tree(node(a)), digit(a))
symintr <| |>
infixr 5 <|
infixl 5 |>
fun lcons {a:t@ype+} (a, finger_tree(a)) : finger_tree(a)
fun rcons {a:t@ype+} (finger_tree(a), a) : finger_tree(a)
overload <| with lcons
overload |> with rcons