packages feed

purescript-0.6.8: examples/passing/ShadowedTCO.purs

module Main where

runNat f = f 0 (\n -> n + 1)

zero' z _ = z

succ f zero' succ = succ (f zero' succ)

add f g zero' succ = g (f zero' succ) succ

one' = succ zero'
two = succ one'
four = add two two
fourNumber = runNat four

main = Debug.Trace.trace $ show fourNumber