Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
data List a = Nil
| Cons a (List a)
deriving Show
xs = Cons 1 (Cons 2 (Cons 3 Nil))
reduceList f z Nil = z
reduceList f z (Cons x xs) = f x (reduceList f z xs)
idList = reduceList Cons Nil
mapList f = reduceList (Cons . f) Nil
filterList p = reduceList (\x xs ->
if p x then Cons x xs
else xs)
mapListIf p f = reduceList (\x xs ->
if p x then Cons (f x) xs
else Cons x xs)
appendList xs1 xs2 = reduceList Cons xs2 xs1
reverseList = reduceList (\x xs -> xs `appendList` (Cons x Nil)) Nil
data BinaryTree a = Empty
| Leaf a
| Branch (BinaryTree a) a (BinaryTree a)
deriving Show
btree = Branch (Leaf 1)
(Branch (Branch Empty
(Leaf 5))
reduceBinaryTree f g z Empty = z
reduceBinaryTree f g z (Leaf x) = g x
reduceBinaryTree f g z (Branch l x r) = f (reduceBinaryTree f g z l)
(reduceBinaryTree f g z r)
mapBinaryTree f = reduceBinaryTree (\l x r -> Branch l (f x) r)
(Leaf . f)
filterBinaryTree2List p = reduceBinaryTree (\l x r ->
let lr = l `appendList` r
in if p x then Cons x lr
else lr)
(\x -> if p x then Cons x Nil
else Nil)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment