blob: 7d3dab3b7d3ccd11368284fbeed9e41a91843913 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
module T22097a
( isEven, isOdd )
where
{-# SPECIALIZE isEven :: Int -> Bool #-}
isEven :: Integral a => a -> Bool
isEven = fst evenOdd
{-# SPECIALIZE isOdd :: Int -> Bool #-}
isOdd :: Integral a => a -> Bool
isOdd = snd evenOdd
evenOdd :: Integral a => (a -> Bool, a -> Bool)
evenOdd = (goEven, goOdd)
where
goEven n
| n < 0 = goEven (- n)
| n > 0 = goOdd (n - 1)
| otherwise = True
goOdd n
| n < 0 = goOdd n
| otherwise = goEven n
|