data Foo a = F (Foo a -> a -> a) foo :: Foo a -> Foo a -> a -> a foo (F f) g x = f g x --m = F (\f x -> if x > 10 then x else foo f m (x + 1)) m = F (\f x -> foo f m (x + 1)) n = F (\f x -> foo f n (x + 1)) main = print $ foo n m 5