-- fibonacci.hs: conjuring a fibonacci function import Conjure fibonacci :: Int -> Int fibonacci 0 = 1 fibonacci 1 = 1 fibonacci 2 = 2 fibonacci 3 = 3 fibonacci 4 = 5 fibonacci 5 = 8 fibonacci 6 = 13 fibonacci 7 = 21 main :: IO () main = do conjure "fibonacci n" fibonacci [ pr (0::Int) , pr (1::Int) , prim "dec" (subtract 1 :: Int -> Int) , prim "+" ((+) :: Int -> Int -> Int) ] -- expected function: -- fibonacci n = if n <= 1 then 1 else fibonacci (dec n) + fibonacci (dec (dec n)) -- 1 2 3 4 5 6 7 8 9 10 11 12 13 {- to note, if dec appears later than + in the primitives list: conjureWith ... = > print $ canReduceTo thy (xx -+- dec xx) (dec (dec xx)) False > print $ canReduceTo thy (dec (dec xx)) (xx -+- dec xx) True -}