| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Feldspar.Run.Frontend
Description
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
      }
      |]Arguments
| :: 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
Arguments
| :: String | Procedure name  | 
| -> [FunArg Data PrimType'] | Arguments (only used to determine types)  | 
| -> Run () | 
Declare an external procedure
Call a function
Call a procedure
Arguments
| :: 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
Arguments
| :: PrimType res | |
| => String | Procedure name  | 
| -> [FunArg Data PrimType'] | Arguments  | 
| -> Run (Data res) | 
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
Constructors
| ReadMode | |
| WriteMode | |
| AppendMode | |
| ReadWriteMode | 
Instances
| Functor Border | |
| Foldable Border | |
Defined in Language.Embedded.Imperative.CMD Methods 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) | 
  | 
Defined in Language.Embedded.Imperative.CMD  | |
| 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
Minimal complete definition
Instances
| IsPointer (Ptr a) | |
Defined in Language.Embedded.Imperative.CMD Methods runSwapPtr :: Ptr a -> Ptr a -> IO () #  | |
| IsPointer (Arr i a) | |
Defined in Language.Embedded.Imperative.CMD Methods 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
Minimal complete definition
Instances
| Formattable Double | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Float | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Int | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Int8 | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Int16 | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Int32 | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Int64 | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Word | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Word8 | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Word16 | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Word32 | |
Defined in Language.Embedded.Imperative.CMD  | |
| Formattable Word64 | |
Defined in Language.Embedded.Imperative.CMD  | |
Pointer
Instances
| Eq (Ptr a) | |
| Show (Ptr a) | |
| IsPointer (Ptr a) | |
Defined in Language.Embedded.Imperative.CMD Methods 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 #
Constructors
| 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 #