-- pow.hs: conjuring exponentiation -- -- Copyright (C) 2021-2025 Rudy Matela -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Conjure pow :: Int -> Int -> Int pow 2 0 = 1 pow 2 1 = 2 pow 2 2 = 4 pow 2 3 = 8 pow 3 2 = 9 main :: IO () main = do -- pow x 0 = 1 -- pow x y = x * pow x (y - 1) conjure "pow" pow [ con (0::Int) , con (1::Int) , fun "*" ((*) :: Int -> Int -> Int) , fun "-" ((-) :: Int -> Int -> Int) ] -- pow b 0 = 1 -- pow b e -- | odd e = b * pow b (e - 1) -- 11 -- | otherwise = square (pow b (halve e)) -- 16 conjure "pow" pow [ con (0::Int) , con (1::Int) , fun "square" ((\x -> x*x) :: Int -> Int) -- cheat , fun "*" ((*) :: Int -> Int -> Int) , fun "-" ((-) :: Int -> Int -> Int) , fun "halve" ((`div` 2) :: Int -> Int) -- cheat , fun "odd" (odd :: Int -> Bool) , guard , maxSize 6 -- remove to find the first version... -- simply out of reach: -- , maxSize 16, carryOn ]