lude

Haskell prelude alternative
git clone git://git.rr3.xyz/lude | git clone gits://git.rr3.xyz/lude
Log | Files | Refs | README | LICENSE

Integer.hs (1040B)


      1 module Lude.Haskell.Integer (
      2     Integer,
      3     pattern IntegerNegSucc,
      4     pattern IntegerZero,
      5     pattern IntegerPosSucc,
      6     integerSign,
      7 ) where
      8 
      9 import Numeric.Natural (Natural)
     10 import Prelude (Integer, fromInteger, fromIntegral, negate, (+), (-), (<), (==))
     11 
     12 --------------------------------------------------------------------------------
     13 
     14 pattern IntegerNegSucc :: Natural -> Integer
     15 pattern IntegerNegSucc n <- (integerSign -> NegSucc n) where IntegerNegSucc n = -fromIntegral (n + 1)
     16 pattern IntegerZero :: Integer
     17 pattern IntegerZero <- (integerSign -> Zero) where IntegerZero = 0
     18 pattern IntegerPosSucc :: Natural -> Integer
     19 pattern IntegerPosSucc n <- (integerSign -> PosSucc n) where IntegerPosSucc n = fromIntegral (n + 1)
     20 {-# COMPLETE IntegerNegSucc, IntegerZero, IntegerPosSucc #-}
     21 
     22 -- TODO: Generalize to ordered rings
     23 data Sign = NegSucc Natural | Zero | PosSucc Natural
     24 integerSign :: Integer -> Sign
     25 integerSign = \case
     26     0 -> Zero
     27     n | n < 0 -> NegSucc (fromInteger (-n) - 1)
     28     n -> PosSucc (fromInteger n - 1)