-- factorial.hs: conjuring a factorial function -- -- Copyright (C) 2021 Rudy Matela -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Conjure factorial :: Int -> Int factorial 1 = 1 factorial 2 = 2 factorial 3 = 6 factorial 4 = 24 main :: IO () main = do -- explicit recursion conjure "factorial n" factorial [ pr (0::Int) , pr (1::Int) , prim "+" ((+) :: Int -> Int -> Int) , prim "*" ((*) :: Int -> Int -> Int) , prim "-" ((-) :: Int -> Int -> Int) ] -- should produce: -- factorial 0 = 1 -- factorial x = x * factorial (x - 1) -- using foldr and enumFromTo conjure "factorial n" factorial [ pr (0::Int) , pr (1::Int) , prim "+" ((+) :: Int -> Int -> Int) , prim "*" ((*) :: Int -> Int -> Int) , prim "-" ((-) :: Int -> Int -> Int) , prim ".." (enumFromTo :: Int -> Int -> [Int]) , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int) ] -- should produce: -- factorial x = foldr (*) 1 [1..x]