raw-feldspar-0.4.1: Resource-Aware Feldspar
Safe HaskellNone
LanguageHaskell2010

Feldspar.Run.Frontend

Description

Monad for running Feldspar programs

Synopsis

Documentation

data Run a Source #

Monad for running Feldspar programs

Instances

Instances details
Monad Run Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

(>>=) :: Run a -> (a -> Run b) -> Run b #

(>>) :: Run a -> Run b -> Run b #

return :: a -> Run a #

Functor Run Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

fmap :: (a -> b) -> Run a -> Run b #

(<$) :: a -> Run b -> Run a #

Applicative Run Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

pure :: a -> Run a #

(<*>) :: Run (a -> b) -> Run a -> Run b #

liftA2 :: (a -> b -> c) -> Run a -> Run b -> Run c #

(*>) :: Run a -> Run b -> Run b #

(<*) :: Run a -> Run b -> Run a #

MonadComp Run Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

liftComp :: Comp a -> Run a Source #

iff :: Data Bool -> Run () -> Run () -> Run () Source #

for :: (Integral n, PrimType n) => IxRange (Data n) -> (Data n -> Run ()) -> Run () Source #

while :: Run (Data Bool) -> Run () -> Run () Source #

MonadRun Run Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

liftRun :: Run a -> Run a Source #

a ~ () => PrintfType (Run a) Source # 
Instance details

Defined in Feldspar.Run.Frontend

class Monad m => MonadRun m where Source #

Methods

liftRun :: m a -> Run a Source #

Instances

Instances details
MonadRun Comp Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

liftRun :: Comp a -> Run a Source #

MonadRun Run Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

liftRun :: Run a -> Run a Source #

class PrintfType r where Source #

Methods

fprf :: Handle -> String -> [PrintfArg Data PrimType'] -> r Source #

Instances

Instances details
a ~ () => PrintfType (Run a) Source # 
Instance details

Defined in Feldspar.Run.Frontend

(Formattable a, PrimType a, PrintfType r) => PrintfType (Data a -> r) Source # 
Instance details

Defined in Feldspar.Run.Frontend

Methods

fprf :: Handle -> String -> [PrintfArg Data PrimType'] -> 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.

fopen :: FilePath -> IOMode -> Run Handle Source #

Open a file

fclose :: Handle -> Run () Source #

Close a file

feof :: Handle -> Run (Data Bool) Source #

Check for end of file

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.

newPtr :: PrimType a => Run (Ptr a) Source #

Create a null pointer

newNamedPtr Source #

Arguments

:: PrimType a 
=> String

Base name

-> Run (Ptr a) 

Create a named null pointer

The provided base name may be appended with a unique identifier to avoid name collisions.

ptrToArr :: PrimType a => Ptr a -> Data Length -> Run (DArr a) Source #

Cast a pointer to an array

newObject Source #

Arguments

:: String

Object type

-> Bool

Pointed?

-> Run Object 

Create a pointer to an abstract object. The only thing one can do with such objects is to pass them to callFun or callProc.

newNamedObject Source #

Arguments

:: String

Base name

-> String

Object type

-> Bool

Pointed?

-> Run Object 

Create a pointer to an abstract object. The only thing one can do with such objects is to pass them to callFun or callProc.

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
      }
      |]

addExternFun Source #

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

addExternProc Source #

Arguments

:: String

Procedure name

-> [FunArg Data PrimType']

Arguments (only used to determine types)

-> Run () 

Declare an external procedure

callFun Source #

Arguments

:: PrimType a 
=> String

Function name

-> [FunArg Data PrimType']

Arguments

-> Run (Data a) 

Call a function

callProc Source #

Arguments

:: String

Function name

-> [FunArg Data PrimType']

Arguments

-> Run () 

Call a procedure

callProcAssign Source #

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

externFun Source #

Arguments

:: PrimType res 
=> String

Procedure name

-> [FunArg Data PrimType']

Arguments

-> Run (Data res) 

Declare and call an external function

externProc Source #

Arguments

:: String

Procedure name

-> [FunArg Data PrimType']

Arguments

-> Run () 

Declare and call an external procedure

inModule :: String -> Run () -> Run () Source #

Generate code into another translation unit

getTime :: Run (Data Double) Source #

Get current time as number of seconds passed today

strArg :: String -> FunArg Data PrimType' Source #

Constant string argument

valArg :: PrimType' a => Data a -> FunArg Data PrimType' Source #

Value argument

refArg :: PrimType' (Internal a) => Ref a -> FunArg Data PrimType' Source #

Reference argument

arrArg :: PrimType' (Internal a) => Arr a -> FunArg Data PrimType' Source #

Mutable array argument

iarrArg :: PrimType' (Internal a) => IArr a -> FunArg Data PrimType' Source #

Immutable array argument

objArg :: Object -> FunArg Data PrimType' Source #

Abstract object argument

constArg Source #

Arguments

:: String

Type

-> String

Named constant

-> FunArg Data PrimType' 

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

data IOMode #

Instances

Instances details
Enum IOMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.IOMode

Eq IOMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.IOMode

Methods

(==) :: IOMode -> IOMode -> Bool #

(/=) :: IOMode -> IOMode -> Bool #

Ord IOMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.IOMode

Read IOMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.IOMode

Show IOMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.IOMode

Ix IOMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.IOMode

stdout :: Handle #

Handle to stdout

stdin :: Handle #

Handle to stdin

data Border i #

Constructors

Incl i 
Excl i 

Instances

Instances details
Functor Border 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

fmap :: (a -> b) -> Border a -> Border b #

(<$) :: a -> Border b -> Border a #

Foldable Border 
Instance details

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 #

toList :: Border a -> [a] #

null :: Border a -> Bool #

length :: Border a -> Int #

elem :: Eq a => a -> Border a -> Bool #

maximum :: Ord a => Border a -> a #

minimum :: Ord a => Border a -> a #

sum :: Num a => Border a -> a #

product :: Num a => Border a -> a #

Traversable Border 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

traverse :: Applicative f => (a -> f b) -> Border a -> f (Border b) #

sequenceA :: Applicative f => Border (f a) -> f (Border a) #

mapM :: Monad m => (a -> m b) -> Border a -> m (Border b) #

sequence :: Monad m => Border (m a) -> m (Border a) #

Eq i => Eq (Border i) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

(==) :: Border i -> Border i -> Bool #

(/=) :: Border i -> Border i -> Bool #

Num i => Num (Border i)

fromInteger gives an inclusive border. No other methods defined.

Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

(+) :: Border i -> Border i -> Border i #

(-) :: Border i -> Border i -> Border i #

(*) :: Border i -> Border i -> Border i #

negate :: Border i -> Border i #

abs :: Border i -> Border i #

signum :: Border i -> Border i #

fromInteger :: Integer -> Border i #

Show i => Show (Border i) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

showsPrec :: Int -> Border i -> ShowS #

show :: Border i -> String #

showList :: [Border i] -> ShowS #

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

runSwapPtr

Instances

Instances details
IsPointer (Ptr a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

runSwapPtr :: Ptr a -> Ptr a -> IO () #

IsPointer (Arr i a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

runSwapPtr :: Arr i a -> Arr i a -> IO () #

data Handle #

File handle

Instances

Instances details
Eq Handle 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

(==) :: Handle -> Handle -> Bool #

(/=) :: Handle -> Handle -> Bool #

Show Handle 
Instance details

Defined in Language.Embedded.Imperative.CMD

ToIdent Handle 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

toIdent :: Handle -> SrcLoc -> Id #

data PrintfArg (exp :: Type -> Type) (pred :: Type -> Constraint) #

class (Typeable a, Read a, PrintfArg a) => Formattable a #

Values that can be printed/scanned using printf/scanf

Minimal complete definition

formatSpecPrint

Instances

Instances details
Formattable Double 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Float 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Int 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Int8 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Int16 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Int32 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Int64 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Word 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Word8 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Word16 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Word32 
Instance details

Defined in Language.Embedded.Imperative.CMD

Formattable Word64 
Instance details

Defined in Language.Embedded.Imperative.CMD

data Ptr a #

Pointer

Instances

Instances details
Eq (Ptr a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

(==) :: Ptr a -> Ptr a -> Bool #

(/=) :: Ptr a -> Ptr a -> Bool #

Show (Ptr a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

showsPrec :: Int -> Ptr a -> ShowS #

show :: Ptr a -> String #

showList :: [Ptr a] -> ShowS #

IsPointer (Ptr a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

runSwapPtr :: Ptr a -> Ptr a -> IO () #

Assignable (Ptr a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

ToIdent (Ptr a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

toIdent :: Ptr a -> SrcLoc -> Id #

data Object #

Abstract object

Instances

Instances details
Eq Object 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

(==) :: Object -> Object -> Bool #

(/=) :: Object -> Object -> Bool #

Show Object 
Instance details

Defined in Language.Embedded.Imperative.CMD

Assignable Object 
Instance details

Defined in Language.Embedded.Imperative.CMD

ToIdent Object 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

toIdent :: Object -> SrcLoc -> Id #

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

Instances details
(CompExp exp, CompTypeClass ct) => Arg (FunArg exp :: (Type -> Constraint) -> Type) (ct :: Type -> Constraint) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Methods

mkArg :: FunArg exp ct -> CGen Exp #

mkParam :: FunArg exp ct -> CGen Param #

class ToIdent obj => Assignable obj #

Instances

Instances details
Assignable Object 
Instance details

Defined in Language.Embedded.Imperative.CMD

Assignable (Ref a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Assignable (Ptr a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Assignable (Arr i a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

Assignable (IArr i a) 
Instance details

Defined in Language.Embedded.Imperative.CMD

data Definition #

Instances

Instances details
Eq Definition 
Instance details

Defined in Language.C.Syntax

Data Definition 
Instance details

Defined in Language.C.Syntax

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Definition -> c Definition #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Definition #

toConstr :: Definition -> Constr #

dataTypeOf :: Definition -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Definition) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Definition) #

gmapT :: (forall b. Data b => b -> b) -> Definition -> Definition #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Definition -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Definition -> r #

gmapQ :: (forall d. Data d => d -> u) -> Definition -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Definition -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Definition -> m Definition #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Definition -> m Definition #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Definition -> m Definition #

Ord Definition 
Instance details

Defined in Language.C.Syntax

Show Definition 
Instance details

Defined in Language.C.Syntax

Located Definition 
Instance details

Defined in Language.C.Syntax

Relocatable Definition 
Instance details

Defined in Language.C.Syntax

Methods

reloc :: Loc -> Definition -> Definition #