-- based code sent by Colin Runciman
import Conjure
drop' :: Int -> [a] -> [a]
drop' 0 [] = []
drop' 1 [] = []
drop' 0 [x,y] = [x,y]
drop' 1 [x,y] = [y]
drop' 2 [x,y] = []
drop' 3 [x,y] = []
drop' 0 [x,y,z] = [x,y,z]
drop' 1 [x,y,z] = [y,z]
drop' 2 [x,y,z] = [z]
drop' 3 [x,y,z] = []
take' :: Int -> [a] -> [a]
take' 0 [x] = []
take' 1 [x] = [x]
take' 0 [x,y] = []
take' 1 [x,y] = [x]
take' 2 [x,y] = [x,y]
take' 3 [x,y] = [x,y]
main :: IO ()
main = do
-- drop 0 xs = xs -- 1
-- drop x [] = [] -- 2
-- drop x (y:xs) = drop (x - 1) xs -- 7
conjure "drop" (drop' :: Int -> [A] -> [A])
[ unfun (0 :: Int)
, unfun (1 :: Int)
, unfun ([] :: [A])
, fun ":" ((:) :: A -> [A] -> [A])
, fun "-" ((-) :: Int -> Int -> Int)
]
-- take 0 xs = [] -- 1
-- take x [] = [] -- 2
-- take x (y:xs) = y:take (x - 1) xs -- 9
conjure "take" (take' :: Int -> [A] -> [A])
[ unfun (0 :: Int)
, unfun (1 :: Int)
, unfun ([] :: [A])
, fun "-" ((-) :: Int -> Int -> Int)
, fun ":" ((:) :: A -> [A] -> [A])
]