llvm-extra-0.8.1: Utility functions for the llvm interface

Safe HaskellNone

LLVM.Extra.Iterator

Contents

Synopsis

Documentation

data T r a Source

Simulates a non-strict list.

Constructors

forall s . (Phi s, Undefined s) => Cons s (forall z. Phi z => s -> T r z (a, s)) 

Instances

Functor (T r) 
Applicative (T r)

ZipList semantics

mapState_ :: Phi t => (a -> t -> CodeGenFunction r t) -> T r a -> t -> CodeGenFunction r tSource

mapStateM_ :: Phi t => (a -> StateT t (CodeGenFunction r) ()) -> T r a -> StateT t (CodeGenFunction r) ()Source

mapWhileState_ :: Phi t => (a -> t -> CodeGenFunction r (Value Bool, t)) -> T r a -> t -> CodeGenFunction r tSource

empty :: T r aSource

singleton :: a -> T r aSource

cons :: (Phi a, Undefined a) => a -> T r a -> T r aSource

mapM :: (a -> CodeGenFunction r b) -> T r a -> T r bSource

mapMaybe :: (Phi b, Undefined b) => (a -> CodeGenFunction r (T b)) -> T r a -> T r bSource

catMaybes :: (Phi a, Undefined a) => T r (T a) -> T r aSource

takeWhileJust :: T r (T a) -> T r aSource

takeWhile :: (a -> CodeGenFunction r (Value Bool)) -> T r a -> T r aSource

iterate :: (Phi a, Undefined a) => (a -> CodeGenFunction r a) -> a -> T r aSource

Attention: This always performs one function call more than necessary. I.e. if f reads from or writes to memory make sure that accessing one more pointer is legal.

cartesianAux :: (Phi a, Phi b, Undefined a, Undefined b) => T r a -> T r b -> T r (T (a, b))Source

helper functions

cartesian :: (Phi a, Phi b, Undefined a, Undefined b) => T r a -> T r b -> T r (a, b)Source

countDown :: (Num i, IsConst i, IsInteger i, CmpRet i, CmpResult i ~ Bool) => Value i -> T r (Value i)Source

take :: (Num i, IsConst i, IsInteger i, CmpRet i, CmpResult i ~ Bool) => Value i -> T r a -> T r aSource

arrayPtrs :: IsType a => Value (Ptr a) -> T r (Value (Ptr a))Source

examples

fixedLengthLoop :: (Phi s, Num i, IsConst i, IsInteger i, CmpRet i, CmpResult i ~ Bool) => Value i -> s -> (s -> CodeGenFunction r s) -> CodeGenFunction r sSource

arrayLoop :: (Phi a, IsType b, Num i, IsConst i, IsInteger i, CmpRet i, CmpResult i ~ Bool) => Value i -> Value (Ptr b) -> a -> (Value (Ptr b) -> a -> CodeGenFunction r a) -> CodeGenFunction r aSource

arrayLoopWithExit :: (Phi s, IsType a, Num i, IsConst i, IsInteger i, CmpRet i, CmpResult i ~ Bool) => Value i -> Value (Ptr a) -> s -> (Value (Ptr a) -> s -> CodeGenFunction r (Value Bool, s)) -> CodeGenFunction r (Value i, s)Source

arrayLoop2 :: (Phi s, IsType a, IsType b, Num i, IsConst i, IsInteger i, CmpRet i, CmpResult i ~ Bool) => Value i -> Value (Ptr a) -> Value (Ptr b) -> s -> (Value (Ptr a) -> Value (Ptr b) -> s -> CodeGenFunction r s) -> CodeGenFunction r sSource