#!/usr/bin/env runhaskell newtype Mu a = Roll (Mu a -> (a -> a)) unroll (Roll x) = x -- y4h :: (a -> a) -> a -> a y4h = \f -> (\x z -> f ((unroll x) x z)) (Roll (\x z -> f ((unroll x) x z))) -- _fact :: (Int -> Int) -> Int -> Int _fact f x = if x <= 0 then 1 else x * (f (x-1)) -- fact :: Int -> Int fact = y4h _fact undefined main = print $ fact 10