Safe Haskell | Safe-Infered |
---|
A monadic library to build dataflow graphs for OM. Builder is only for Graph vector gauge () . Graphs with other annotation types can be created by fmap. This module exports everything, for writing other Builder modules.
- type Builder vector gauge anot val = State (BuilderState vector gauge anot) val
- data BuilderState vector gauge anot = BuilderState {}
- type B ret = forall v g a. Builder v g a ret
- type BuilderOf r c = forall v g a. Builder v g a (Value r c)
- buildKernel :: Setup v g a -> Name -> Builder v g a () -> Kernel v g a
- initState :: Setup v g a -> BuilderState v g a
- modifyG :: (Graph v g a -> Graph v g a) -> Builder v g a ()
- getG :: Builder v g a (Graph v g a)
- freeNode :: B Node
- addNode :: [Node] -> Node v g a -> Builder v g a Node
- addNodeE :: [Node] -> (a -> Node v g a) -> Builder v g a Node
- valueToNode :: (TRealm r, Typeable c) => Value r c -> B Node
- lookUpStatic :: Named DynValue -> B StaticIdx
- bind :: (Monad m, Functor m) => m a -> m (m a)
- load :: (TRealm r, Typeable c) => Named (StaticValue r c) -> B (Value r c)
- store :: (TRealm r, Typeable c) => Named (StaticValue r c) -> Builder v g a (Value r c) -> Builder v g a ()
- reduce :: Typeable c => Operator -> Builder v g a (Value TArray c) -> Builder v g a (Value TScalar c)
- broadcast :: Typeable c => Builder v g a (Value TScalar c) -> Builder v g a (Value TArray c)
- shift :: Typeable c => v g -> Builder v g a (Value TArray c) -> Builder v g a (Value TArray c)
- loadIndex :: Typeable g => Axis v -> Builder v g a (Value TArray g)
- loadSize :: Typeable g => Axis v -> Builder v g a (Value TScalar g)
- imm :: (TRealm r, Typeable c) => c -> B (Value r c)
- mkOp1 :: (TRealm r, Typeable c) => Operator -> Builder v g a (Value r c) -> Builder v g a (Value r c)
- mkOp2 :: (TRealm r, Typeable c) => Operator -> Builder v g a (Value r c) -> Builder v g a (Value r c) -> Builder v g a (Value r c)
- cast :: (TRealm r, Typeable c1, Typeable c2) => c2 -> Builder v g a (Value r c1) -> Builder v g a (Value r c2)
- annotate :: (TRealm r, Typeable c) => (a -> a) -> Builder v g a (Value r c) -> Builder v g a (Value r c)
- (<?>) :: (TRealm r, Typeable c) => (a -> a) -> Builder v g a (Value r c) -> Builder v g a (Value r c)
- withAnnotation :: (a -> a) -> Builder v g a ret -> Builder v g a ret
Documentation
type Builder vector gauge anot val = State (BuilderState vector gauge anot) valSource
data BuilderState vector gauge anot Source
(Show anot, Show (vector gauge), Vector vector) => Show (BuilderState vector gauge anot) | |
Eq (Builder v g a ret) | |
(TRealm r, Typeable c, C c, Fractional c) => Fractional (Builder v g a (Value r c)) | you can convert GHC floating point immediates to |
(TRealm r, Typeable c, C c) => Num (Builder v g a (Value r c)) | you can convert GHC numeric immediates to |
Show (Builder v g a ret) | |
(TRealm r, Typeable c) => C (Builder v g a (Value r c)) | choose the larger or the smaller of the two. |
(TRealm r, Typeable c, C c) => C (Builder v g a (Value r c)) | |
(TRealm r, Typeable c, C c) => C (Builder v g a (Value r c)) | |
(TRealm r, Typeable c, C c) => C (Builder v g a (Value r c)) | |
(TRealm r, Typeable c, C c) => C (Builder v g a (Value r c)) | |
(TRealm r, Typeable c, C c) => C (Builder v g a (Value r c)) | Builder is Ring |
(TRealm r, Typeable c, C c) => C (Builder v g a (Value r c)) | |
(TRealm r, Typeable c) => C (Builder v g a (Value r c)) | |
(TRealm r, Typeable c, C c) => C (Builder v g a (Value r c)) | |
TRealm r => Boolean (Builder v g a (Value r Bool)) |
initState :: Setup v g a -> BuilderState v g aSource
:: (Graph v g a -> Graph v g a) | The graph modifying function. |
-> Builder v g a () | The state gets silently modified. |
Modify the dataflow graph stored in the Builder
.
:: [Node] | The list of dependent nodes. The order is recorded. |
-> Node v g a | The new node to be added. |
-> Builder v g a Node |
add a node to the graph.
:: [Node] | The list of dependent nodes. The order is recorded. |
-> (a -> Node v g a) | The new node to be added, with Annotation missing. |
-> Builder v g a Node |
add a node to the graph with an empty Annotation.
lookUpStatic :: Named DynValue -> B StaticIdxSource
look up the Named
DynValue
with the correct name and type
is included in the staticValues
of the BuilderState
bind :: (Monad m, Functor m) => m a -> m (m a)Source
run the given builder monad, get the result graph node,
and wrap it in a return
monad for later use.
it is like binding a value to a monad-level identifier.
:: (TRealm r, Typeable c) | |
=> Named (StaticValue r c) | the named static value to be loaded from. |
-> B (Value r c) | The loaded |
Load from a static value.
:: (TRealm r, Typeable c) | |
=> Named (StaticValue r c) | the named static value to be stored on. |
-> Builder v g a (Value r c) | The |
-> Builder v g a () | The result. |
Store to a static value.
:: (TRealm r, Typeable c) | |
=> Operator | The operator symbol |
-> Builder v g a (Value r c) | Input |
-> Builder v g a (Value r c) | Output |
Make a unary operator
:: (TRealm r, Typeable c) | |
=> Operator | The operator symbol |
-> Builder v g a (Value r c) | Input 1 |
-> Builder v g a (Value r c) | Input 2 |
-> Builder v g a (Value r c) | Output |
Make a binary operator
cast :: (TRealm r, Typeable c1, Typeable c2) => c2 -> Builder v g a (Value r c1) -> Builder v g a (Value r c2)Source
take a phantom object c2
, and perform the cast that keeps the realm while
change the content type from c1
to c2
.
annotate :: (TRealm r, Typeable c) => (a -> a) -> Builder v g a (Value r c) -> Builder v g a (Value r c)Source
Execute the builder, and annotate the very result with the givin function.
(<?>) :: (TRealm r, Typeable c) => (a -> a) -> Builder v g a (Value r c) -> Builder v g a (Value r c)Source
(?) = annotate
withAnnotation :: (a -> a) -> Builder v g a ret -> Builder v g a retSource
Execute the builder under modifed annotation.