| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Haskus.Number.SignedSafe
Description
Signed safe numbers
Synopsis
- newtype Signed (b :: Nat) = Signed (BitNat (b + 1))
- signedIsZero :: (Num (BitNatWord (b + 1)), Eq (BitNatWord (b + 1))) => Signed b -> Bool
- signedIsNaN :: (Num (BitNatWord (b + 1)), Eq (BitNatWord (b + 1))) => Signed b -> Bool
- signedFromBitNat :: (ShiftableBits (BitNatWord (b + 1)), Widen b (b + 1)) => BitNat b -> Signed b
- signedNegate :: IsBitNat (b + 1) => Signed b -> Signed b
- signedPos :: forall (v :: Nat) b. (b ~ NatBitCount v, MakeBitNat b, Bitwise (BitNatWord b), Integral (BitNatWord (b + 1)), KnownNat v, ShiftableBits (BitNatWord (b + 1)), Widen b (b + 1)) => Signed b
- signedNeg :: forall (v :: Nat) b. (b ~ NatBitCount v, MakeBitNat b, Bitwise (BitNatWord b), KnownNat v, Widen b (b + 1), ShiftableBits (BitNatWord (b + 1)), IsBitNat (b + 1)) => Signed b
Documentation
newtype Signed (b :: Nat) Source #
A signed number (not in two-complement form)
- Bits: ddd..ddds where "s" is the sign bit
- Allows symetric positive and negative numbers
- Negative zero is NaN
Instances
| (KnownNat b, Integral (BitNatWord b), IndexableBits (BitNatWord (b + 1)), Num (BitNatWord (b + 1)), Eq (BitNatWord (b + 1)), Integral (BitNatWord (b + 1)), ShiftableBits (BitNatWord (b + 1)), Narrow (b + 1) ((b + 1) - 1)) => Show (Signed b) Source # | Show instance for Signed |
signedIsZero :: (Num (BitNatWord (b + 1)), Eq (BitNatWord (b + 1))) => Signed b -> Bool Source #
Test for zero
>>>signedIsZero (signedNeg @5)False>>>signedIsZero (signedNeg @0)True
signedIsNaN :: (Num (BitNatWord (b + 1)), Eq (BitNatWord (b + 1))) => Signed b -> Bool Source #
Test for NaN
>>>signedIsNaN (signedPos @5)False>>>signedIsNaN (signedPos @0)False
signedFromBitNat :: (ShiftableBits (BitNatWord (b + 1)), Widen b (b + 1)) => BitNat b -> Signed b Source #
Create from a BitNat
>>>signedFromBitNat (bitNat @18)18
signedNegate :: IsBitNat (b + 1) => Signed b -> Signed b Source #
Negate a signed number
>>>signedNegate (signedPos @5)-5>>>signedNegate (signedNeg @5)5
signedPos :: forall (v :: Nat) b. (b ~ NatBitCount v, MakeBitNat b, Bitwise (BitNatWord b), Integral (BitNatWord (b + 1)), KnownNat v, ShiftableBits (BitNatWord (b + 1)), Widen b (b + 1)) => Signed b Source #
Positive signed literal
>>>signedPos @55>>>signedPos @00
signedNeg :: forall (v :: Nat) b. (b ~ NatBitCount v, MakeBitNat b, Bitwise (BitNatWord b), KnownNat v, Widen b (b + 1), ShiftableBits (BitNatWord (b + 1)), IsBitNat (b + 1)) => Signed b Source #
Negative signed literal
>>>signedNeg @5-5>>>signedNeg @00