Safe Haskell | None |
---|---|
Language | Haskell2010 |
Monad for running Feldspar programs
Synopsis
- data Run a
- class Monad m => MonadRun m where
- class PrintfType r where
- unsafeSwap :: Ptr a -> Ptr a -> Run ()
- unsafeSwapArr :: Arr a -> Arr a -> Run ()
- fopen :: FilePath -> IOMode -> Run Handle
- fclose :: Handle -> Run ()
- feof :: Handle -> Run (Data Bool)
- fprintf :: PrintfType r => Handle -> String -> r
- fput :: (Formattable a, PrimType a) => Handle -> String -> Data a -> String -> Run ()
- fget :: (Formattable a, PrimType a) => Handle -> Run (Data a)
- printf :: PrintfType r => String -> r
- newPtr :: PrimType a => Run (Ptr a)
- newNamedPtr :: PrimType a => String -> Run (Ptr a)
- ptrToArr :: PrimType a => Ptr a -> Data Length -> Run (DArr a)
- newObject :: String -> Bool -> Run Object
- newNamedObject :: String -> String -> Bool -> Run Object
- addInclude :: String -> Run ()
- addDefinition :: Definition -> Run ()
- addExternFun :: PrimType res => String -> proxy res -> [FunArg Data PrimType'] -> Run ()
- addExternProc :: String -> [FunArg Data PrimType'] -> Run ()
- callFun :: PrimType a => String -> [FunArg Data PrimType'] -> Run (Data a)
- callProc :: String -> [FunArg Data PrimType'] -> Run ()
- callProcAssign :: Assignable obj => obj -> String -> [FunArg Data PrimType'] -> Run ()
- externFun :: PrimType res => String -> [FunArg Data PrimType'] -> Run (Data res)
- externProc :: String -> [FunArg Data PrimType'] -> Run ()
- inModule :: String -> Run () -> Run ()
- getTime :: Run (Data Double)
- strArg :: String -> FunArg Data PrimType'
- valArg :: PrimType' a => Data a -> FunArg Data PrimType'
- refArg :: PrimType' (Internal a) => Ref a -> FunArg Data PrimType'
- arrArg :: PrimType' (Internal a) => Arr a -> FunArg Data PrimType'
- iarrArg :: PrimType' (Internal a) => IArr a -> FunArg Data PrimType'
- objArg :: Object -> FunArg Data PrimType'
- constArg :: String -> String -> FunArg Data PrimType'
- addr :: FunArg Data PrimType' -> FunArg Data PrimType'
- deref :: FunArg Data PrimType' -> FunArg Data PrimType'
- data IOMode
- stdout :: Handle
- stdin :: Handle
- data Border i
- type IxRange i = (i, Int, Border i)
- class ToIdent a => IsPointer a
- data Handle
- data PrintfArg (exp :: Type -> Type) (pred :: Type -> Constraint)
- class (Typeable a, Read a, PrintfArg a) => Formattable a
- data Ptr a
- data Object
- data FunArg (exp :: k -> Type) (pred :: k -> Constraint) where
- ValArg :: forall k (pred :: k -> Constraint) (a :: k) (exp :: k -> Type). pred a => exp a -> FunArg exp pred
- AddrArg :: forall k (exp :: k -> Type) (pred :: k -> Constraint). FunArg exp pred -> FunArg exp pred
- DerefArg :: forall k (exp :: k -> Type) (pred :: k -> Constraint). FunArg exp pred -> FunArg exp pred
- OffsetArg :: forall k (exp :: k -> Type) (pred :: k -> Constraint) (i :: k). FunArg exp pred -> exp i -> FunArg exp pred
- FunArg :: forall k (arg :: (k -> Constraint) -> Type) (pred :: k -> Constraint) (exp :: k -> Type). Arg arg pred => arg pred -> FunArg exp pred
- class ToIdent obj => Assignable obj
- data Definition
- cedecl :: QuasiQuoter
Documentation
Monad for running Feldspar programs
class PrintfType r where Source #
Instances
a ~ () => PrintfType (Run a) Source # | |
(Formattable a, PrimType a, PrintfType r) => PrintfType (Data a -> r) Source # | |
unsafeSwap :: Ptr a -> Ptr a -> Run () Source #
Swap two pointers
This is generally an unsafe operation. E.g. it can be used to make a reference to a data structure escape the scope of the data.
unsafeSwapArr :: Arr a -> Arr a -> Run () Source #
Like unsafeSwap
but for arrays. The why we cannot use unsafeSwap
directly is that Arr
cannot be made an instance of IsPointer
.
fprintf :: PrintfType r => Handle -> String -> r Source #
Print to a handle. Accepts a variable number of arguments.
fput :: (Formattable a, PrimType a) => Handle -> String -> Data a -> String -> Run () Source #
Put a primitive value to a handle
fget :: (Formattable a, PrimType a) => Handle -> Run (Data a) Source #
Get a primitive value from a handle
printf :: PrintfType r => String -> r Source #
Print to stdout
. Accepts a variable number of arguments.
Create a named null pointer
The provided base name may be appended with a unique identifier to avoid name collisions.
addInclude :: String -> Run () Source #
Add an #include
statement to the generated code
addDefinition :: Definition -> Run () Source #
Add a global definition to the generated code
Can be used conveniently as follows:
{-# LANGUAGE QuasiQuotes #-} import Feldspar.IO prog = do ... addDefinition myCFunction ... where myCFunction = [cedecl| void my_C_function( ... ) { // C code // goes here } |]
:: PrimType res | |
=> String | Function name |
-> proxy res | Proxy for expression and result type |
-> [FunArg Data PrimType'] | Arguments (only used to determine types) |
-> Run () |
Declare an external function
Declare an external procedure
Call a function
Call a procedure
:: Assignable obj | |
=> obj | Object to which the result should be assigned |
-> String | Procedure name |
-> [FunArg Data PrimType'] | Arguments |
-> Run () |
Call a procedure and assign its result
Declare and call an external function
Declare and call an external procedure
iarrArg :: PrimType' (Internal a) => IArr a -> FunArg Data PrimType' Source #
Immutable array argument
Named constant argument
addr :: FunArg Data PrimType' -> FunArg Data PrimType' Source #
Modifier that takes the address of another argument
deref :: FunArg Data PrimType' -> FunArg Data PrimType' Source #
Modifier that dereferences another argument
See openFile
Instances
Functor Border | |
Foldable Border | |
Defined in Language.Embedded.Imperative.CMD fold :: Monoid m => Border m -> m # foldMap :: Monoid m => (a -> m) -> Border a -> m # foldMap' :: Monoid m => (a -> m) -> Border a -> m # foldr :: (a -> b -> b) -> b -> Border a -> b # foldr' :: (a -> b -> b) -> b -> Border a -> b # foldl :: (b -> a -> b) -> b -> Border a -> b # foldl' :: (b -> a -> b) -> b -> Border a -> b # foldr1 :: (a -> a -> a) -> Border a -> a # foldl1 :: (a -> a -> a) -> Border a -> a # elem :: Eq a => a -> Border a -> Bool # maximum :: Ord a => Border a -> a # minimum :: Ord a => Border a -> a # | |
Traversable Border | |
Eq i => Eq (Border i) | |
Num i => Num (Border i) |
|
Show i => Show (Border i) | |
type IxRange i = (i, Int, Border i) #
Index range
(lo,step,hi)
lo
gives the start index; step
gives the step length; hi
gives the stop
index which may be inclusive or exclusive.
class ToIdent a => IsPointer a #
Types that are represented as a pointers in C
Instances
IsPointer (Ptr a) | |
Defined in Language.Embedded.Imperative.CMD runSwapPtr :: Ptr a -> Ptr a -> IO () # | |
IsPointer (Arr i a) | |
Defined in Language.Embedded.Imperative.CMD runSwapPtr :: Arr i a -> Arr i a -> IO () # |
class (Typeable a, Read a, PrintfArg a) => Formattable a #
Values that can be printed/scanned using printf
/scanf
Instances
Pointer
Instances
Eq (Ptr a) | |
Show (Ptr a) | |
IsPointer (Ptr a) | |
Defined in Language.Embedded.Imperative.CMD runSwapPtr :: Ptr a -> Ptr a -> IO () # | |
Assignable (Ptr a) | |
Defined in Language.Embedded.Imperative.CMD | |
ToIdent (Ptr a) | |
Abstract object
Instances
data FunArg (exp :: k -> Type) (pred :: k -> Constraint) where #
ValArg :: forall k (pred :: k -> Constraint) (a :: k) (exp :: k -> Type). pred a => exp a -> FunArg exp pred | |
AddrArg :: forall k (exp :: k -> Type) (pred :: k -> Constraint). FunArg exp pred -> FunArg exp pred | |
DerefArg :: forall k (exp :: k -> Type) (pred :: k -> Constraint). FunArg exp pred -> FunArg exp pred | |
OffsetArg :: forall k (exp :: k -> Type) (pred :: k -> Constraint) (i :: k). FunArg exp pred -> exp i -> FunArg exp pred | |
FunArg :: forall k (arg :: (k -> Constraint) -> Type) (pred :: k -> Constraint) (exp :: k -> Type). Arg arg pred => arg pred -> FunArg exp pred |
Instances
(CompExp exp, CompTypeClass ct) => Arg (FunArg exp :: (Type -> Constraint) -> Type) (ct :: Type -> Constraint) | |
class ToIdent obj => Assignable obj #
Instances
Assignable Object | |
Defined in Language.Embedded.Imperative.CMD | |
Assignable (Ref a) | |
Defined in Language.Embedded.Imperative.CMD | |
Assignable (Ptr a) | |
Defined in Language.Embedded.Imperative.CMD | |
Assignable (Arr i a) | |
Defined in Language.Embedded.Imperative.CMD | |
Assignable (IArr i a) | |
Defined in Language.Embedded.Imperative.CMD |
data Definition #
Instances
cedecl :: QuasiQuoter #