type Adder = Int -> Int makeAdder :: (Int -> Int -> Int) -> Int -> Adder makeAdder f = f makeGoodAdder = makeAdder (+) makeBadAdder = makeAdder (*) testAdder cons delta value = let adder = cons delta in value + delta == adder value main = do print $ testAdder makeGoodAdder 2 3 print $ testAdder makeBadAdder 2 3