#!/usr/bin/runghc module Recursion04EvenOdd where import Data.Bits isEven :: Int -> Bool isEven 0 = True isEven n = isOdd (n - 1) isOdd :: Int -> Bool isOdd 0 = False isOdd n = isEven (n - 1) main :: IO () main = do putStrLn "Slowest:" print (isEven 10) print (isEven 5) print (isOdd 10) print (isOdd 5) putStrLn "\nLess slow:" print (mod 10 2 == 0) print (mod 5 2 == 0) print (mod 10 2 /= 0) print (mod 5 2 /= 0) putStrLn "\nFastest:" print ((10 :: Int) .&. 1 == 0) print ((5 :: Int) .&. 1 == 0) print ((10 :: Int) .&. 1 /= 0) print ((5 :: Int) .&. 1 /= 0) putStrLn "\nBuilt in:" print (even 10) print (even 5) print (odd 10) print (odd 5)