56 lines
804 B
Plaintext
56 lines
804 B
Plaintext
module Data.List
|
|
|
|
/* This is a comment */
|
|
export datatype List a =
|
|
NULL()
|
|
| (:)(a,List a);
|
|
|
|
export (++)(a :: [a], b :: [a]) :: [a]
|
|
{
|
|
case a {
|
|
[] -> b;
|
|
(af:ar) ->
|
|
case b {
|
|
[] -> a;
|
|
_ -> af:(ar ++ b);
|
|
}
|
|
}
|
|
};
|
|
|
|
export null(ls :: [a]) :: Bool
|
|
{
|
|
case ls {
|
|
[] -> True;
|
|
_ -> False;
|
|
}
|
|
};
|
|
|
|
export length(ls :: [a]) :: Int
|
|
{
|
|
case ls {
|
|
[] -> 0;
|
|
(_:rest) -> 1 + length(rest);
|
|
}
|
|
};
|
|
|
|
export reverse(ls :: [a]) :: [a]
|
|
{
|
|
let helper(xs,acc) = {
|
|
case xs {
|
|
[] -> acc;
|
|
(a:rest) -> helper(rest, (a:acc));
|
|
}
|
|
};
|
|
|
|
helper(ls, []);
|
|
};
|
|
|
|
export restrict(Eq a) find(f :: a -> Bool, ls :: [a]) :: Maybe a
|
|
{
|
|
case ls {
|
|
[] -> False;
|
|
(a:_) | f(a) -> a;
|
|
(_:rest) -> find(f, rest);
|
|
}
|
|
};
|