packages feed

purescript-0.5.4.1: 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