data MyList a = Nil | Cons a (MyList a) deriving (Eq,Ord,Show,Read) range n m |n == m = Cons m Nil range n m = Cons n (range (n + 1) m) myfoldl _ v Nil = v myfoldl f v (Cons x xs) = myfoldl f (f v x) xs myreverse = myfoldl (\ys x -> Cons x ys) Nil myhead (Cons x _) = x main = print (myhead (myreverse (range 1 1000000)))