-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | The Posit Number format. Please see the README on GitHub at
-- https://github.com/waivio/posit#readme
@package posit
@version 3.2.0.2
-- | Library implementing standard 'Posit-3.2' numbers, as defined by the
-- Posit Working Group 23 June 2018.
module Posit.Internal.PositC
-- | The Posit class is an approximation of ℝ, it is like a
-- sampling on the Projective Real line ℙ(ℝ) with Maybe ℚ as the internal
-- type. The es is an index that controlls the log2 word size of
-- the Posit's fininte precision representation.
class (FixedWidthInteger (IntN es)) => PositC (es :: ES)
-- | Transform to/from the Infinite Precision Representation
encode :: PositC es => Maybe Rational -> IntN es
decode :: PositC es => IntN es -> Maybe Rational
-- | Exponent Size based on the Posit Exponent kind ES
exponentSize :: PositC es => Natural
-- | Various other size definitions used in the Posit format with their
-- default definitions
nBytes :: PositC es => Natural
nBits :: PositC es => Natural
signBitSize :: PositC es => Natural
uSeed :: PositC es => Natural
-- | Integer Representation of common bounds
unReal :: PositC es => IntN es
mostPosVal :: PositC es => IntN es
leastPosVal :: PositC es => IntN es
leastNegVal :: PositC es => IntN es
mostNegVal :: PositC es => IntN es
maxPosRat :: PositC es => Rational
minPosRat :: PositC es => Rational
maxNegRat :: PositC es => Rational
minNegRat :: PositC es => Rational
log_uSeed :: PositC es => (Integer, Rational) -> (Integer, Rational)
getRegime :: PositC es => Rational -> (Integer, Rational)
posit2TupPosit :: PositC es => Rational -> (Bool, Integer, Natural, Rational)
buildIntRep :: PositC es => Rational -> IntN es
mkIntRep :: PositC es => Integer -> Natural -> Rational -> IntN es
formRegime :: PositC es => Integer -> (IntN es, Integer)
formExponent :: PositC es => Natural -> Integer -> (IntN es, Integer)
formFraction :: PositC es => Rational -> Integer -> IntN es
tupPosit2Posit :: PositC es => (Bool, Integer, Natural, Rational) -> Maybe Rational
regime2Integer :: PositC es => IntN es -> (Integer, Int)
findRegimeFormat :: PositC es => IntN es -> Bool
countRegimeBits :: PositC es => Bool -> IntN es -> Int
exponent2Nat :: PositC es => Int -> IntN es -> Natural
fraction2Posit :: PositC es => Int -> IntN es -> Rational
displayBin :: PositC es => IntN es -> String
decimalPrec :: PositC es => Int
-- | The Exponent Size ES kind, the constructor for the Type is a
-- Roman Numeral.
data ES
Z :: ES
I :: ES
II :: ES
III :: ES
IV :: ES
V :: ES
-- | Type of the Finite Precision Representation, in our case Int8, Int16,
-- Int32, Int64, Int128, Int256. The es of kind ES will
-- determine a result of r such that you can determine the
-- es by the r
type family IntN (es :: ES) = r | r -> es
-- | The FixedWidthInteger is a Constraint Synonym that contains all
-- of the constraints provided by the IntN Type Family. It is a
-- super class for the Posit Class.
type FixedWidthInteger a = (Bits a, Bounded a, Enum a, Integral a, Eq a, Ord a, Num a, Read a, Show a, Storable a)
instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.Z
instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.I
instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.II
instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.III
instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.IV
instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.V
instance Foreign.Storable.Storable Data.DoubleWord.Word128
instance Foreign.Storable.Storable Data.DoubleWord.Int128
instance Foreign.Storable.Storable Data.DoubleWord.Int256
-- | Library implementing standard Posit Numbers (Posit Standard version
-- 3.2.0.0, with some improvements) a fixed width word size of 2^es
-- bytes.
module Posit
-- | Base GADT rapper type, that uses the Exponent Size kind to index the
-- various implementations
data Posit (es :: ES)
type Posit8 = Posit Z
type Posit16 = Posit I
type Posit32 = Posit II
type Posit64 = Posit III
type Posit128 = Posit IV
type Posit256 = Posit V
-- | Not a Real Number, the Posit is like a Maybe type, it's either a real
-- number or not
pattern NaR :: PositC es => Posit es
-- | A Real or at least Rational Number, rounded to the nearest Posit
-- Rational representation
pattern R :: PositC es => Rational -> Posit es
-- | A class that delays the rounding operation until the end for some
-- operations
class Num a => FusedOps a
-- | Fused Multiply Add: (a * b) + c
fma :: FusedOps a => a -> a -> a -> a
-- | Fused Add Multiply: (a + b) * c
fam :: FusedOps a => a -> a -> a -> a
-- | Fused Multiply Multiply Subtract: (a * b) - (c * d)
fmms :: FusedOps a => a -> a -> a -> a -> a
-- | Fused Sum of 3 values: a + b + c
fsum3 :: FusedOps a => a -> a -> a -> a
-- | Fused Sum of 4 values: a + b + c + d
fsum4 :: FusedOps a => a -> a -> a -> a -> a
-- | Fused Sum of a List of Posits
fsumL :: (FusedOps a, Foldable t) => t a -> a
-- | Fused Dot Product of 3 element vector: (a1 * b1) + (a2 * b2) + (a3 *
-- b3)
fdot3 :: FusedOps a => a -> a -> a -> a -> a -> a -> a
-- | Fused Dot Product of 4 element vector: (a0 * b0) + (a1 * b1) + (a2 *
-- b2) + (a3 * b3)
fdot4 :: FusedOps a => a -> a -> a -> a -> a -> a -> a -> a -> a
-- | Fused Dot Product of Two Lists
fdotL :: (FusedOps a, Foldable t) => t a -> t a -> a
-- | Fused Subtract Multiply: a - (b * c)
fsm :: FusedOps a => a -> a -> a -> a
-- | A Convertible class that will cast or convert between two
-- different Posit es types
class Convertible a b
convert :: Convertible a b => a -> b
-- | A Alternative to the typical Show class to assist in displaying
-- the Posit es type in different formats
class AltShow a
-- | Display the Posit in its Binary Representation
displayBinary :: AltShow a => a -> String
-- | Display the Posit in its Integral Representation
displayIntegral :: AltShow a => a -> String
-- | Display the Posit as a Rational
displayRational :: AltShow a => a -> String
-- | Display the Posit as a Decimal until the Repetend occurs
displayDecimal :: AltShow a => a -> String
class AltFloating p
phi :: AltFloating p => p
gamma :: AltFloating p => p -> p
sinc :: AltFloating p => p -> p
expm1 :: AltFloating p => p -> p
viaIntegral :: PositC es => (IntN es -> IntN es) -> Posit es -> Posit es
viaRational :: PositC es => (Rational -> Rational) -> Posit es -> Posit es
viaRational2 :: PositC es => (Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es
viaRational3 :: PositC es => (Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es
viaRational4 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es
viaRational6 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es
viaRational8 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es
instance Posit.AltFloating Posit.Posit8
instance Posit.AltFloating Posit.Posit16
instance Posit.AltFloating Posit.Posit32
instance Posit.AltFloating Posit.Posit64
instance Posit.AltFloating Posit.Posit128
instance Posit.AltFloating Posit.Posit256
instance Posit.Internal.PositC.PositC es => Posit.AltShow (Posit.Posit es)
instance (Posit.Internal.PositC.PositC es1, Posit.Internal.PositC.PositC es2) => Posit.Convertible (Posit.Posit es1) (Posit.Posit es2)
instance GHC.Float.Floating Posit.Posit8
instance GHC.Float.Floating Posit.Posit16
instance GHC.Float.Floating Posit.Posit32
instance GHC.Float.Floating Posit.Posit64
instance GHC.Float.Floating Posit.Posit128
instance Posit.FusedOps GHC.Real.Rational
instance Posit.Internal.PositC.PositC es => Posit.FusedOps (Posit.Posit es)
instance GHC.Float.Floating Posit.Posit256
instance Posit.Internal.PositC.PositC es => GHC.Show.Show (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Classes.Eq (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Classes.Ord (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Num.Num (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Enum.Enum (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Real.Fractional (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Real.Real (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Enum.Bounded (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Read.Read (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => Foreign.Storable.Storable (Posit.Posit es)
instance Posit.Internal.PositC.PositC es => GHC.Real.RealFrac (Posit.Posit es)
instance (GHC.Float.Floating (Posit.Posit es), Posit.Internal.PositC.PositC es) => GHC.Float.RealFloat (Posit.Posit es)