Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Synopsis
- newtype Exp a = Exp {
- unExp :: forall r. CodeGenFunction r (T a)
- unique :: (forall r. CodeGenFunction r (T a)) -> Exp a
- _unique :: (forall r. CodeGenFunction r (T a)) -> Exp a
- withKey :: (forall r. CodeGenFunction r (T a)) -> IORef (Maybe (T a)) -> Exp a
- with :: Exp a -> (Exp a -> Exp b) -> Exp b
- class Value val where
- lift3 :: Value val => (T a -> T b -> T c -> T d) -> val a -> val b -> val c -> val d
- lift4 :: Value val => (T a -> T b -> T c -> T d -> T e) -> val a -> val b -> val c -> val d -> val e
- liftM :: Aggregate ae am => (forall r. am -> CodeGenFunction r (T b)) -> ae -> Exp b
- liftM2 :: Aggregate ae am => Aggregate be bm => (forall r. am -> bm -> CodeGenFunction r (T c)) -> ae -> be -> Exp c
- liftM3 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => (forall r. am -> bm -> cm -> CodeGenFunction r (T d)) -> ae -> be -> ce -> Exp d
- unliftM1 :: Aggregate ae am => Aggregate be bm => (ae -> be) -> am -> CodeGenFunction r bm
- unliftM2 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => (ae -> be -> ce) -> am -> bm -> CodeGenFunction r cm
- unliftM3 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => Aggregate de dm => (ae -> be -> ce -> de) -> am -> bm -> cm -> CodeGenFunction r dm
- unliftM4 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => Aggregate de dm => Aggregate ee em => (ae -> be -> ce -> de -> ee) -> am -> bm -> cm -> dm -> CodeGenFunction r em
- liftReprM :: (forall r. Repr a -> CodeGenFunction r (Repr b)) -> Exp a -> Exp b
- liftReprM2 :: (forall r. Repr a -> Repr b -> CodeGenFunction r (Repr c)) -> Exp a -> Exp b -> Exp c
- liftReprM3 :: (forall r. Repr a -> Repr b -> Repr c -> CodeGenFunction r (Repr d)) -> Exp a -> Exp b -> Exp c -> Exp d
- zip :: Value val => val a -> val b -> val (a, b)
- zip3 :: Value val => val a -> val b -> val c -> val (a, b, c)
- zip4 :: Value val => val a -> val b -> val c -> val d -> val (a, b, c, d)
- unzip :: Value val => val (a, b) -> (val a, val b)
- unzip3 :: Value val => val (a, b, c) -> (val a, val b, val c)
- unzip4 :: Value val => val (a, b, c, d) -> (val a, val b, val c, val d)
- fst :: Value val => val (a, b) -> val a
- snd :: Value val => val (a, b) -> val b
- mapFst :: (Exp a -> Exp b) -> Exp (a, c) -> Exp (b, c)
- mapSnd :: (Exp b -> Exp c) -> Exp (a, b) -> Exp (a, c)
- mapPair :: (Exp a0 -> Exp a1, Exp b0 -> Exp b1) -> Exp (a0, b0) -> Exp (a1, b1)
- swap :: Value val => val (a, b) -> val (b, a)
- curry :: (Exp (a, b) -> c) -> Exp a -> Exp b -> c
- uncurry :: (Exp a -> Exp b -> c) -> Exp (a, b) -> c
- fst3 :: Value val => val (a, b, c) -> val a
- snd3 :: Value val => val (a, b, c) -> val b
- thd3 :: Value val => val (a, b, c) -> val c
- mapFst3 :: (Exp a0 -> Exp a1) -> Exp (a0, b, c) -> Exp (a1, b, c)
- mapSnd3 :: (Exp b0 -> Exp b1) -> Exp (a, b0, c) -> Exp (a, b1, c)
- mapThd3 :: (Exp c0 -> Exp c1) -> Exp (a, b, c0) -> Exp (a, b, c1)
- mapTriple :: (Exp a0 -> Exp a1, Exp b0 -> Exp b1, Exp c0 -> Exp c1) -> Exp (a0, b0, c0) -> Exp (a1, b1, c1)
- tuple :: Exp tuple -> Exp (Tuple tuple)
- untuple :: Exp (Tuple tuple) -> Exp tuple
- modifyMultiValue :: (Value val, Compose a, Decompose pattern, PatternTuple pattern ~ tuple) => pattern -> (Decomposed T pattern -> a) -> val tuple -> val (Composed a)
- modifyMultiValue2 :: (Value val, Compose a, Decompose patternA, Decompose patternB, PatternTuple patternA ~ tupleA, PatternTuple patternB ~ tupleB) => patternA -> patternB -> (Decomposed T patternA -> Decomposed T patternB -> a) -> val tupleA -> val tupleB -> val (Composed a)
- modifyMultiValueM :: (Compose a, Decompose pattern, PatternTuple pattern ~ tuple) => pattern -> (forall r. Decomposed T pattern -> CodeGenFunction r a) -> Exp tuple -> Exp (Composed a)
- modifyMultiValueM2 :: (Compose a, Decompose patternA, Decompose patternB, PatternTuple patternA ~ tupleA, PatternTuple patternB ~ tupleB) => patternA -> patternB -> (forall r. Decomposed T patternA -> Decomposed T patternB -> CodeGenFunction r a) -> Exp tupleA -> Exp tupleB -> Exp (Composed a)
- class Compose multituple where
- class Composed (Decomposed Exp pattern) ~ PatternTuple pattern => Decompose pattern where
- decompose :: pattern -> Exp (PatternTuple pattern) -> Decomposed Exp pattern
- modify :: (Compose a, Decompose pattern) => pattern -> (Decomposed Exp pattern -> a) -> Exp (PatternTuple pattern) -> Exp (Composed a)
- modify2 :: (Compose a, Decompose patternA, Decompose patternB) => patternA -> patternB -> (Decomposed Exp patternA -> Decomposed Exp patternB -> a) -> Exp (PatternTuple patternA) -> Exp (PatternTuple patternB) -> Exp (Composed a)
- consComplex :: Exp a -> Exp a -> Exp (Complex a)
- deconsComplex :: Exp (Complex a) -> (Exp a, Exp a)
- class (MultiValuesOf exp ~ mv, ExpressionsOf mv ~ exp) => Aggregate exp mv where
- type MultiValuesOf exp
- type ExpressionsOf mv
- bundle :: exp -> CodeGenFunction r mv
- dissect :: mv -> exp
- newtype Scalar a = Scalar a
- cons :: C a => a -> Exp a
- unit :: Exp ()
- zero :: C a => Exp a
- add :: Additive a => Exp a -> Exp a -> Exp a
- sub :: Additive a => Exp a -> Exp a -> Exp a
- neg :: Additive a => Exp a -> Exp a
- one :: IntegerConstant a => Exp a
- mul :: PseudoRing a => Exp a -> Exp a -> Exp a
- sqr :: PseudoRing a => Exp a -> Exp a
- recip :: (Field a, IntegerConstant a) => Exp a -> Exp a
- fdiv :: Field a => Exp a -> Exp a -> Exp a
- sqrt :: Algebraic a => Exp a -> Exp a
- pow :: Transcendental a => Exp a -> Exp a -> Exp a
- idiv :: Integral a => Exp a -> Exp a -> Exp a
- irem :: Integral a => Exp a -> Exp a -> Exp a
- shl :: BitShift a => Exp a -> Exp a -> Exp a
- shr :: BitShift a => Exp a -> Exp a -> Exp a
- fromInteger' :: IntegerConstant a => Integer -> Exp a
- fromRational' :: RationalConstant a => Rational -> Exp a
- boolPFrom8 :: Exp Bool8 -> Exp Bool
- bool8FromP :: Exp Bool -> Exp Bool8
- intFromBool8 :: NativeInteger i ir => Exp Bool8 -> Exp i
- floatFromBool8 :: NativeFloating a ar => Exp Bool8 -> Exp a
- toEnum :: Repr w ~ Value w => Exp w -> Exp (T w e)
- fromEnum :: Repr w ~ Value w => Exp (T w e) -> Exp w
- succ :: (IsArithmetic w, IntegerConstant w) => Exp (T w e) -> Exp (T w e)
- pred :: (IsArithmetic w, IntegerConstant w) => Exp (T w e) -> Exp (T w e)
- fromFastMath :: Exp (Number flags a) -> Exp a
- toFastMath :: Exp a -> Exp (Number flags a)
- minBound :: Bounded a => Exp a
- maxBound :: Bounded a => Exp a
- cmp :: Comparison a => CmpPredicate -> Exp a -> Exp a -> Exp Bool
- (==*) :: Comparison a => Exp a -> Exp a -> Exp Bool
- (/=*) :: Comparison a => Exp a -> Exp a -> Exp Bool
- (<*) :: Comparison a => Exp a -> Exp a -> Exp Bool
- (>=*) :: Comparison a => Exp a -> Exp a -> Exp Bool
- (>*) :: Comparison a => Exp a -> Exp a -> Exp Bool
- (<=*) :: Comparison a => Exp a -> Exp a -> Exp Bool
- min :: Real a => Exp a -> Exp a -> Exp a
- max :: Real a => Exp a -> Exp a -> Exp a
- limit :: Real a => (Exp a, Exp a) -> Exp a -> Exp a
- fraction :: Fraction a => Exp a -> Exp a
- true :: Exp Bool
- false :: Exp Bool
- (&&*) :: Exp Bool -> Exp Bool -> Exp Bool
- (||*) :: Exp Bool -> Exp Bool -> Exp Bool
- not :: Exp Bool -> Exp Bool
- select :: Select a => Exp Bool -> Exp a -> Exp a -> Exp a
- ifThenElse :: C a => Exp Bool -> Exp a -> Exp a -> Exp a
- complement :: Logic a => Exp a -> Exp a
- (.&.*) :: Logic a => Exp a -> Exp a -> Exp a
- (.|.*) :: Logic a => Exp a -> Exp a -> Exp a
- xor :: Logic a => Exp a -> Exp a -> Exp a
- toMaybe :: Exp Bool -> Exp a -> Exp (Maybe a)
- maybe :: C b => Exp b -> (Exp a -> Exp b) -> Exp (Maybe a) -> Exp b
- tau :: (Transcendental a, RationalConstant a) => Exp a
- fromIntegral :: (NativeInteger i ir, NativeFloating a ar) => Exp i -> Exp a
- truncateToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i
- floorToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i
- ceilingToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i
- roundToIntFast :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i
- splitFractionToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> (Exp i, Exp a)
Documentation
Exp | |
|
Instances
class Value val where Source #
lift0 :: T a -> val a Source #
lift1 :: (T a -> T b) -> val a -> val b Source #
lift2 :: (T a -> T b -> T c) -> val a -> val b -> val c Source #
lift4 :: Value val => (T a -> T b -> T c -> T d -> T e) -> val a -> val b -> val c -> val d -> val e Source #
liftM2 :: Aggregate ae am => Aggregate be bm => (forall r. am -> bm -> CodeGenFunction r (T c)) -> ae -> be -> Exp c Source #
liftM3 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => (forall r. am -> bm -> cm -> CodeGenFunction r (T d)) -> ae -> be -> ce -> Exp d Source #
unliftM2 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => (ae -> be -> ce) -> am -> bm -> CodeGenFunction r cm Source #
unliftM3 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => Aggregate de dm => (ae -> be -> ce -> de) -> am -> bm -> cm -> CodeGenFunction r dm Source #
unliftM4 :: Aggregate ae am => Aggregate be bm => Aggregate ce cm => Aggregate de dm => Aggregate ee em => (ae -> be -> ce -> de -> ee) -> am -> bm -> cm -> dm -> CodeGenFunction r em Source #
liftReprM2 :: (forall r. Repr a -> Repr b -> CodeGenFunction r (Repr c)) -> Exp a -> Exp b -> Exp c Source #
liftReprM3 :: (forall r. Repr a -> Repr b -> Repr c -> CodeGenFunction r (Repr d)) -> Exp a -> Exp b -> Exp c -> Exp d Source #
mapTriple :: (Exp a0 -> Exp a1, Exp b0 -> Exp b1, Exp c0 -> Exp c1) -> Exp (a0, b0, c0) -> Exp (a1, b1, c1) Source #
modifyMultiValue :: (Value val, Compose a, Decompose pattern, PatternTuple pattern ~ tuple) => pattern -> (Decomposed T pattern -> a) -> val tuple -> val (Composed a) Source #
modifyMultiValue2 :: (Value val, Compose a, Decompose patternA, Decompose patternB, PatternTuple patternA ~ tupleA, PatternTuple patternB ~ tupleB) => patternA -> patternB -> (Decomposed T patternA -> Decomposed T patternB -> a) -> val tupleA -> val tupleB -> val (Composed a) Source #
modifyMultiValueM :: (Compose a, Decompose pattern, PatternTuple pattern ~ tuple) => pattern -> (forall r. Decomposed T pattern -> CodeGenFunction r a) -> Exp tuple -> Exp (Composed a) Source #
modifyMultiValueM2 :: (Compose a, Decompose patternA, Decompose patternB, PatternTuple patternA ~ tupleA, PatternTuple patternB ~ tupleB) => patternA -> patternB -> (forall r. Decomposed T patternA -> Decomposed T patternB -> CodeGenFunction r a) -> Exp tupleA -> Exp tupleB -> Exp (Composed a) Source #
class Compose multituple where Source #
Instances
Compose () Source # | |
Compose a => Compose (Complex a) Source # | |
Compose (Exp a) Source # | |
Compose tuple => Compose (Tuple tuple) Source # | |
(Compose a, Compose b) => Compose (a, b) Source # | |
(Compose a, Compose b, Compose c) => Compose (a, b, c) Source # | |
(Compose a, Compose b, Compose c, Compose d) => Compose (a, b, c, d) Source # | |
class Composed (Decomposed Exp pattern) ~ PatternTuple pattern => Decompose pattern where Source #
decompose :: pattern -> Exp (PatternTuple pattern) -> Decomposed Exp pattern Source #
Analogous to decompose
.
Instances
modify :: (Compose a, Decompose pattern) => pattern -> (Decomposed Exp pattern -> a) -> Exp (PatternTuple pattern) -> Exp (Composed a) Source #
Analogus to modifyMultiValue
.
modify2 :: (Compose a, Decompose patternA, Decompose patternB) => patternA -> patternB -> (Decomposed Exp patternA -> Decomposed Exp patternB -> a) -> Exp (PatternTuple patternA) -> Exp (PatternTuple patternB) -> Exp (Composed a) Source #
consComplex :: Exp a -> Exp a -> Exp (Complex a) Source #
You can construct complex numbers this way, but they will not make you happy, because the numeric operations require a RealFloat instance that we could only provide with lots of undefined methods (also in its superclasses). You may either define your own arithmetic or use the NumericPrelude type classes.
class (MultiValuesOf exp ~ mv, ExpressionsOf mv ~ exp) => Aggregate exp mv where Source #
type MultiValuesOf exp Source #
type ExpressionsOf mv Source #
Instances
Scalar a |
Instances
C a => C (Scalar a) Source # | |
C a => C (Scalar a) Source # | |
Aggregate exp mv => Aggregate (Scalar exp) (T mv) Source # | |
Defined in LLVM.DSL.Expression type MultiValuesOf (Scalar exp) Source # type ExpressionsOf (T mv) Source # | |
(C a, a ~ b) => C (Scalar a) (Scalar b) Source # | |
type MultiValuesOf (Scalar exp) Source # | |
Defined in LLVM.DSL.Expression |
one :: IntegerConstant a => Exp a Source #
fromInteger' :: IntegerConstant a => Integer -> Exp a Source #
fromRational' :: RationalConstant a => Rational -> Exp a Source #
intFromBool8 :: NativeInteger i ir => Exp Bool8 -> Exp i Source #
floatFromBool8 :: NativeFloating a ar => Exp Bool8 -> Exp a Source #
cmp :: Comparison a => CmpPredicate -> Exp a -> Exp a -> Exp Bool Source #
select :: Select a => Exp Bool -> Exp a -> Exp a -> Exp a Source #
Like ifThenElse
but computes both alternative expressions
and then uses LLVM's efficient select
instruction.
tau :: (Transcendental a, RationalConstant a) => Exp a Source #
fromIntegral :: (NativeInteger i ir, NativeFloating a ar) => Exp i -> Exp a Source #
truncateToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i Source #
floorToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i Source #
ceilingToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i Source #
roundToIntFast :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> Exp i Source #
splitFractionToInt :: (NativeInteger i ir, NativeFloating a ar) => Exp a -> (Exp i, Exp a) Source #