@@ -2,38 +2,40 @@ import builtins;
22
33namespace list {
44
5−data List a = Nil | Cons a (List a);
5+infixr 7 :: ;
6+
7+data List a = Nil | (::) a (List a);
68
79rev : List a -> List a;
810rev xs = revAcc Nil xs where {
911 revAcc : List a -> List a -> List a;
1012 revAcc acc Nil = acc;
11− revAcc acc (Cons x xs) = revAcc (Cons x acc) xs;
13+ revAcc acc (x :: xs) = revAcc (x :: acc) xs;
1214}
1315
1416length : List a -> Int;
1517length Nil = 0;
16−length (Cons x xs) = 1 + length xs;
18+length (x :: xs) = 1 + length xs;
1719
1820take : Int -> List a -> List a;
1921take 0 xs = Nil;
2022take n Nil = Nil;
21−take n (Cons x xs) = Cons x (take (n-1) xs);
23+take n (x :: xs) = x :: take (n-1) xs;
2224
2325drop : Int -> List a -> List a;
2426drop 0 xs = xs;
2527drop n Nil = Nil;
26−drop n (Cons x xs) = drop (n-1) xs;
28+drop n (x :: xs) = drop (n-1) xs;
2729
2830map : (a -> b) -> List a -> List b;
2931map f Nil = Nil;
30−map f (Cons x xs) = Cons (f x) (map f xs);
32+map f (x :: xs) = f x :: map f xs;
3133
3234filter : (y -> Bool) -> List y -> List y;
3335filter pred Nil = Nil;
34−filter pred (Cons x xs) with (pred x, filter pred xs) {
35− filter pred (Cons x xs) | (True, fxs) = Cons x fxs;
36− filter pred (Cons x xs) | (False, fxs) = fxs;
36+filter pred (x :: xs) with (pred x, filter pred xs) {
37+ filter pred (x :: xs) | (True, fxs) = x :: fxs;
38+ filter pred (x :: xs) | (False, fxs) = fxs;
3739}
3840
3941}