packages feed

disco-0.1.0.0: test/types-tydef-param/types-tydef-param.disco

type Maybe(a) = Unit + a

maybe : b -> (a -> b) -> Maybe(a) -> b
maybe b _ (left(■))  = b
maybe _ f (right(a)) = f a

m1 : Maybe(N)
m1 = left(■)

m2 : Maybe(N)
m2 = right 3


type Tree(a) = Unit + a * Tree(a) * Tree(a)

foldTree : r -> (a -> r -> r -> r) -> Tree(a) -> r
foldTree z f (left(■)) = z
foldTree z f (right (a,l,r)) = f a (foldTree z f l) (foldTree z f r)

sumTree : Tree(N) -> N
sumTree = foldTree 0 (\a, l, r. a+l+r)

t : Tree(N)
t = right (5, right (2, left(■), left(■)), right (7, right (1, left(■), left(■)), left(■)))


type AltList(a,b) = Unit + a * AltList(b,a)

alt1 : AltList(N, Bool)
alt1 = right (3, right (true, right (5, right (false, right (7, left(■))))))

foldAltList : r -> (a -> r -> r) -> (b -> r -> r) -> AltList(a, b) -> r
foldAltList z _ _ (left(■)) = z
foldAltList z f g (right (a, l)) = f a (foldAltList z g f l)

sumAltList : AltList(N,Bool) -> N
sumAltList = foldAltList 0 (\x, y. x+y) (\b, r. r)