{-# LANGUAGE Rank2Types #-}
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
--len :: forall a . [a] -> Int
len [] = 0
len (x:xs) = 1 + len xs
lensum = len [1,2,3] + len "abc"
funsum :: (forall a . [a] -> Int) -> [b] -> [c] -> Int
funsum f xs ys = f xs + f ys
usefunsum = funsum len [1,2,3] "abc"
funsum2 f g xs ys = f xs + g ys
usefunsum2 = funsum2 len len [1,2,3] "abc"