summaryrefslogtreecommitdiff
path: root/testsuite/tests/simplCore/should_compile/T22097a.hs
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