18 lines
368 B
Elm
18 lines
368 B
Elm
import Html exposing (text)
|
|
|
|
type Mu a b = Roll (Mu a b -> a -> b)
|
|
|
|
unroll : Mu a b -> (Mu a b -> a -> b)
|
|
unroll (Roll x) = x
|
|
|
|
fix : ((a -> b) -> (a -> b)) -> (a -> b)
|
|
fix f = let g r = f (\v -> unroll r r v)
|
|
in g (Roll g)
|
|
|
|
fac : Int -> Int
|
|
fac = fix <|
|
|
\f n -> if n <= 0
|
|
then 1
|
|
else n * f (n - 1)
|
|
|
|
main = text <| toString <| fac 5
|