diff --git a/src/Data/Int.purs b/src/Data/Int.purs index fdfef54..448c9c7 100644 --- a/src/Data/Int.purs +++ b/src/Data/Int.purs @@ -14,6 +14,8 @@ module Data.Int , base36 , fromStringAs , toStringAs + , Parity(..) + , parity , even , odd , pow @@ -77,6 +79,29 @@ foreign import toNumber :: Int -> Number fromString :: String -> Maybe Int fromString = fromStringAs (Radix 10) +-- | A type for describing whether an integer is even or odd. +data Parity = Even | Odd + +derive instance eqParity :: Eq Parity +derive instance ordParity :: Ord Parity + +instance showParity :: Show Parity where + show Even = "Even" + show Odd = "Odd" + +instance boundedParity :: Bounded Parity where + bottom = Even + top = Odd + +-- | Returns whether an `Int` is `Even` or `Odd`. +-- | +-- | ``` purescript +-- | parity 0 == Even +-- | parity 1 == Odd +-- | ``` +parity :: Int -> Parity +parity n = if even n then Even else Odd + -- | Returns whether an `Int` is an even number. -- | -- | ``` purescript @@ -90,7 +115,7 @@ even x = x .&. 1 == 0 -- | -- | ``` purescript -- | odd 0 == false --- | odd 1 == false +-- | odd 1 == true -- | ``` odd :: Int -> Boolean odd x = x .&. 1 /= 0