Quick actions

cmd+k|ctrl+k

Navigation

Languages

Non-Recursive Y Combinator

Snippet info

Language

Haskell

Visibility

public

Author

homam

Created

2016-08-07T10:36:22Z

Updated

2016-08-07T10:36:22Z

type OpenRec x y = (x -> y) -> x -> y

fact :: OpenRec Int Int
fact x n = if n == 0 then 1 else n * x(n - 1)


newtype Mu a = Mu (Mu a -> a)
y :: OpenRec x y -> x -> y
y f = (\h -> h $ Mu h) (\x -> f . (\(Mu g) -> g) x $ x)

main = do 
    print $ fact(fact(fact(undefined)))(2)
    print $ y(fact)(10)
INFO