# PicoML
A minimal statically-typed functional programming language. Not actually
an ML. Written entirely in cross-platform C; allows for multiple code
generators.
Exhaustive feature list:
- sums (eager)
- products (lazy)
- functions
- currying
- closures
- references
- implicit values (searched by type, must be unambiguous)
- libc bindings (incl. malloc)
Maybe looking like
~~~~
data List a =
[ Cons a (List a)
, Nil
]
map (f : a -> b) (l : List a) : List b =
case l of
Cons x xs -> Cons (f x) (map f xs)
Nil -> Nil
record Stream a =
{ .head a
, .tail (Stream a)
}
mapS (f : a -> b) (s : Stream a) : Stream b =
{ .head = f s.head
, .tail = mapS f s.tail
}
record Functor f = { .fmap ((a -> b) -> f a -> f b) }
implicit listFunctor : Functor List = { .fmap = map }
implicit streamFunctor : Functor Stream = { .fmap = mapS }
~~~~