
--
---- Higher-Order Programming
--

-- Exponential

exp :: Integer -> Integer -> Integer

let exp b n = if (n == 0) then 1 else b * exp b (n-1)

let exp = \b -> \n -> if (n == 0) then 1 else b * exp b (n-1)

exp 2 5
exp 2 30
exp 2 100
exp 2 1000

-- Powers of 2

let twoE = exp 2

twoE 100

-- Reverse curry
let rCurry = \f -> \x -> \y -> f y x

-- Square function revisited

let square = rCurry exp 2

square 5
