twice f x = f (f x) -- Does not pass the type checker due to occur check --fun g = g g len [] = 0::Int len (x:xs) = 1 + len xs len2 xs ys = len xs + len ys mainlen2 = len2 [1,2,3] "Hello" -- Arbitrary recursive functions: f n = g n + h n g n = j n + f n h n = i n + g n i n = n j n = k n k n = j n + l n l n = 5 :: Int