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

Feldspar.Representation

Description

Internal representation of Feldspar programs

Synopsis

Object-language types

type TypeRep = Struct PrimType' PrimTypeRep Source #

Representation of all supported types

class (Eq a, Show a, Typeable a, Inhabited a) => Type a where Source #

Supported types

Methods

typeRep :: TypeRep a Source #

Reify a type

Instances

Instances details
Type Bool Source # 
Instance details

Defined in Feldspar.Representation

Type Double Source # 
Instance details

Defined in Feldspar.Representation

Type Float Source # 
Instance details

Defined in Feldspar.Representation

Type Int8 Source # 
Instance details

Defined in Feldspar.Representation

Type Int16 Source # 
Instance details

Defined in Feldspar.Representation

Type Int32 Source # 
Instance details

Defined in Feldspar.Representation

Type Int64 Source # 
Instance details

Defined in Feldspar.Representation

Type Word8 Source # 
Instance details

Defined in Feldspar.Representation

Type Word16 Source # 
Instance details

Defined in Feldspar.Representation

Type Word32 Source # 
Instance details

Defined in Feldspar.Representation

Type Word64 Source # 
Instance details

Defined in Feldspar.Representation

Type (Complex Double) Source # 
Instance details

Defined in Feldspar.Representation

Type (Complex Float) Source # 
Instance details

Defined in Feldspar.Representation

(Type a, Type b) => Type (a, b) Source # 
Instance details

Defined in Feldspar.Representation

Methods

typeRep :: TypeRep (a, b) Source #

class (PrimType' a, Type a) => PrimType a Source #

Alias for the conjunction of PrimType' and Type

Instances

Instances details
CompTypeClass PrimType Source # 
Instance details

Defined in Feldspar.Representation

Methods

compType :: (PrimType a, MonadC m) => proxy1 PrimType -> proxy2 a -> m Type #

compLit :: (PrimType a, MonadC m) => proxy PrimType -> a -> m Exp #

(PrimType' a, Type a) => PrimType a Source # 
Instance details

Defined in Feldspar.Representation

toTypeRep :: Struct PrimType' c a -> TypeRep a Source #

Convert any Struct with a PrimType constraint to a TypeRep

typeEq :: TypeRep a -> TypeRep b -> Maybe (Dict (a ~ b)) Source #

Check whether two type representations are equal

witTypeable :: TypeRep a -> Dict (Typeable a) Source #

Reflect a TypeRep to a Typeable constraint

data TypeRepFun a where Source #

Representation of supported value types + N-ary functions over such types

Constructors

ValT :: TypeRep a -> TypeRepFun a 
FunT :: TypeRep a -> TypeRepFun b -> TypeRepFun (a -> b) 

typeEqFun :: TypeRepFun a -> TypeRepFun b -> Maybe (Dict (a ~ b)) Source #

Check whether two type representations are equal

newtype Ref a Source #

Mutable variable

Constructors

Ref 

Instances

Instances details
Eq (Ref a) Source # 
Instance details

Defined in Feldspar.Representation

Methods

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

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

type DRef a = Ref (Data a) Source #

Reference specialized to Data elements

data Arr a Source #

Mutable array

Instances

Instances details
Eq (Arr a) Source #

== checks if two Arr use the same physical array. The length and offset are ignored.

Instance details

Defined in Feldspar.Representation

Methods

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

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

Slicable (Arr a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

slice :: Data Index -> Data Length -> Arr a -> Arr a Source #

Finite (Arr a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

length :: Arr a -> Data Length Source #

(MarshalHaskell (Internal a), MarshalFeld a, Syntax a) => MarshalFeld (Arr a) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Arr a) Source #

Methods

fwrite :: Handle -> Arr a -> Run () Source #

fread :: Handle -> Run (Arr a) Source #

(Syntax a, BulkTransferable a, ContainerType a ~ Arr a) => Transferable (Arr a) Source # 
Instance details

Defined in Feldspar.Data.Vector

Associated Types

type SizeSpec (Arr a) Source #

type HaskellRep (Arr a) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Arr a) = [Internal a]
type SizeSpec (Arr a) Source # 
Instance details

Defined in Feldspar.Data.Vector

type DArr a = Arr (Data a) Source #

Array specialized to Data elements

data IArr a Source #

Immutable array

Instances

Instances details
MonadComp m => Manifestable2 m (Manifest2 a) a Source #

manifest2 and manifestFresh2 are no-ops. manifestStore2 does a proper arrCopy.

Instance details

Defined in Feldspar.Data.Vector

MonadComp m => Manifestable m (Manifest a) a Source #

manifest and manifestFresh are no-ops. manifestStore does a proper arrCopy.

Instance details

Defined in Feldspar.Data.Vector

Methods

manifest :: Arr a -> Manifest a -> m (Manifest a) Source #

manifestFresh :: Manifest a -> m (Manifest a) Source #

manifestStore :: Arr a -> Manifest a -> m () Source #

(Syntax a, MonadComp m) => Seqy m (Manifest a) a Source # 
Instance details

Defined in Feldspar.Data.Vector

Methods

toSeq :: Manifest a -> Seq m a Source #

(Syntax a, MonadComp m) => Pushy2 m (Manifest2 a) a Source # 
Instance details

Defined in Feldspar.Data.Vector

Methods

toPush2 :: Manifest2 a -> Push2 m a Source #

(Syntax a, MonadComp m) => Pushy2 m (Manifest a) a Source #

Convert to a Push2 with a single row

Instance details

Defined in Feldspar.Data.Vector

Methods

toPush2 :: Manifest a -> Push2 m a Source #

(Syntax a, MonadComp m) => Pushy m (Manifest a) a Source # 
Instance details

Defined in Feldspar.Data.Vector

Methods

toPush :: Manifest a -> Push m a Source #

Slicable (IArr a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

slice :: Data Index -> Data Length -> IArr a -> IArr a Source #

Finite (IArr a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

length :: IArr a -> Data Length Source #

Syntax a => Indexed (IArr a) Source # 
Instance details

Defined in Feldspar.Frontend

Associated Types

type IndexedElem (IArr a) Source #

Methods

(!) :: IArr a -> Data Index -> IndexedElem (IArr a) Source #

(MarshalHaskell (Internal a), MarshalFeld a, Syntax a) => MarshalFeld (IArr a) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (IArr a) Source #

Methods

fwrite :: Handle -> IArr a -> Run () Source #

fread :: Handle -> Run (IArr a) Source #

(Syntax a, BulkTransferable a, ContainerType a ~ Arr a) => Transferable (IArr a) Source # 
Instance details

Defined in Feldspar.Data.Vector

Associated Types

type SizeSpec (IArr a) Source #

Finite2 (Manifest a) Source #

Treated as a row vector

Instance details

Defined in Feldspar.Data.Vector

Syntax a => Storable (Manifest2 a) Source # 
Instance details

Defined in Feldspar.Data.Storable

Associated Types

type StoreRep (Manifest2 a) Source #

type StoreSize (Manifest2 a) Source #

Syntax a => Storable (Manifest a) Source # 
Instance details

Defined in Feldspar.Data.Storable

Associated Types

type StoreRep (Manifest a) Source #

type StoreSize (Manifest a) Source #

ViewManifest2 (Manifest2 a) a Source # 
Instance details

Defined in Feldspar.Data.Vector

ViewManifest (Manifest a) a Source # 
Instance details

Defined in Feldspar.Data.Vector

Syntax a => Pully2 (Manifest a) a Source #

Convert to a Pull2 with a single row

Instance details

Defined in Feldspar.Data.Vector

Methods

toPull2 :: Manifest a -> Pull2 a Source #

type IndexedElem (IArr a) Source # 
Instance details

Defined in Feldspar.Frontend

type IndexedElem (IArr a) = a
type HaskellRep (IArr a) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (IArr a) = [Internal a]
type SizeSpec (IArr a) Source # 
Instance details

Defined in Feldspar.Data.Vector

type StoreRep (Manifest2 a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type StoreRep (Manifest a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type StoreRep (Manifest a) = (DRef Length, Arr a)
type StoreSize (Manifest2 a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type StoreSize (Manifest a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type DIArr a = IArr (Data a) Source #

Immutable array specialized to Data elements

unsafeEqArrIArr :: Arr a -> IArr a -> Bool Source #

Check if an Arr and and IArr use the same physical array. The length and offset are ignored. This operation may give false negatives, but never false positives. Whether or not false negatives occur may also depend on the interpretation of the program.

Due to this unreliability, the function should only be used to affect the non-functional properties of a program (e.g. to avoid unnecessary array copying).

Pure expressions

data AssertionLabel Source #

Assertion labels

Constructors

InternalAssertion

Internal assertion to guarantee meaningful results

LibraryAssertion String

Assertion related to a specific library

UserAssertion String

Assertion in user code. The default label for user assertions is UserAssertion ""

onlyUserAssertions :: Selection AssertionLabel Source #

A selection that includes all labels defined as UserAssertion

data ExtraPrimitive sig where Source #

Instances

Instances details
Eval ExtraPrimitive Source # 
Instance details

Defined in Feldspar.Representation

Methods

evalSym :: ExtraPrimitive sig -> Denotation sig #

Equality ExtraPrimitive Source # 
Instance details

Defined in Feldspar.Representation

Render ExtraPrimitive Source # 
Instance details

Defined in Feldspar.Representation

StringTree ExtraPrimitive Source # 
Instance details

Defined in Feldspar.Representation

Symbol ExtraPrimitive Source # 
Instance details

Defined in Feldspar.Representation

Methods

symSig :: ExtraPrimitive sig -> SigRep sig #

EvalEnv ExtraPrimitive env Source # 
Instance details

Defined in Feldspar.Representation

Methods

compileSym :: proxy env -> ExtraPrimitive sig -> DenotationM (Reader env) sig #

data ForLoop sig where Source #

For loop

Constructors

ForLoop :: Type st => ForLoop (Length :-> (st :-> ((Index -> st -> st) :-> Full st))) 

Instances

Instances details
Eval ForLoop Source # 
Instance details

Defined in Feldspar.Representation

Methods

evalSym :: ForLoop sig -> Denotation sig #

Equality ForLoop Source # 
Instance details

Defined in Feldspar.Representation

Methods

equal :: ForLoop a -> ForLoop b -> Bool #

hash :: ForLoop a -> Hash #

Render ForLoop Source # 
Instance details

Defined in Feldspar.Representation

Methods

renderSym :: ForLoop sig -> String #

renderArgs :: [String] -> ForLoop sig -> String #

StringTree ForLoop Source # 
Instance details

Defined in Feldspar.Representation

Symbol ForLoop Source # 
Instance details

Defined in Feldspar.Representation

Methods

symSig :: ForLoop sig -> SigRep sig #

EvalEnv ForLoop env Source # 
Instance details

Defined in Feldspar.Representation

Methods

compileSym :: proxy env -> ForLoop sig -> DenotationM (Reader env) sig #

data Unsafe sig where Source #

Interaction with the IO layer

Constructors

UnsafePerform :: Comp (Data a) -> Unsafe (Full a) 

Instances

Instances details
Eval Unsafe Source # 
Instance details

Defined in Feldspar.Representation

Methods

evalSym :: Unsafe sig -> Denotation sig #

Equality Unsafe Source #

equal always returns False

Instance details

Defined in Feldspar.Representation

Methods

equal :: Unsafe a -> Unsafe b -> Bool #

hash :: Unsafe a -> Hash #

Render Unsafe Source # 
Instance details

Defined in Feldspar.Representation

Methods

renderSym :: Unsafe sig -> String #

renderArgs :: [String] -> Unsafe sig -> String #

StringTree Unsafe Source # 
Instance details

Defined in Feldspar.Representation

Symbol Unsafe Source # 
Instance details

Defined in Feldspar.Representation

Methods

symSig :: Unsafe sig -> SigRep sig #

EvalEnv Unsafe env Source # 
Instance details

Defined in Feldspar.Representation

Methods

compileSym :: proxy env -> Unsafe sig -> DenotationM (Reader env) sig #

newtype Data a Source #

Constructors

Data 

Fields

Instances

Instances details
FreeExp Data Source # 
Instance details

Defined in Feldspar.Representation

Associated Types

type FreePred Data :: Type -> Constraint #

Methods

constExp :: FreePred Data a => a -> Data a #

varExp :: FreePred Data a => VarId -> Data a #

EvalExp Data Source # 
Instance details

Defined in Feldspar.Representation

Methods

evalExp :: Data a -> a #

(Bounded a, Type a) => Bounded (Data a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

minBound :: Data a #

maxBound :: Data a #

(Floating a, PrimType a) => Floating (Data a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

pi :: Data a #

exp :: Data a -> Data a #

log :: Data a -> Data a #

sqrt :: Data a -> Data a #

(**) :: Data a -> Data a -> Data a #

logBase :: Data a -> Data a -> Data a #

sin :: Data a -> Data a #

cos :: Data a -> Data a #

tan :: Data a -> Data a #

asin :: Data a -> Data a #

acos :: Data a -> Data a #

atan :: Data a -> Data a #

sinh :: Data a -> Data a #

cosh :: Data a -> Data a #

tanh :: Data a -> Data a #

asinh :: Data a -> Data a #

acosh :: Data a -> Data a #

atanh :: Data a -> Data a #

log1p :: Data a -> Data a #

expm1 :: Data a -> Data a #

log1pexp :: Data a -> Data a #

log1mexp :: Data a -> Data a #

(Fractional a, PrimType a) => Fractional (Data a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

(/) :: Data a -> Data a -> Data a #

recip :: Data a -> Data a #

fromRational :: Rational -> Data a #

(Num a, PrimType a) => Num (Data a) Source # 
Instance details

Defined in Feldspar.Frontend

Methods

(+) :: Data a -> Data a -> Data a #

(-) :: Data a -> Data a -> Data a #

(*) :: Data a -> Data a -> Data a #

negate :: Data a -> Data a #

abs :: Data a -> Data a #

signum :: Data a -> Data a #

fromInteger :: Integer -> Data a #

Syntactic (Data a) Source #

Declaring Data as syntactic sugar

Instance details

Defined in Feldspar.Representation

Associated Types

type Domain (Data a) :: Type -> Type #

type Internal (Data a) #

Methods

desugar :: Data a -> ASTF (Domain (Data a)) (Internal (Data a)) #

sugar :: ASTF (Domain (Data a)) (Internal (Data a)) -> Data a #

MarshalFeld (Data Double) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Double) Source #

MarshalFeld (Data Float) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Float) Source #

MarshalFeld (Data Int8) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Int8) Source #

MarshalFeld (Data Int16) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Int16) Source #

MarshalFeld (Data Int32) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Int32) Source #

MarshalFeld (Data Int64) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Int64) Source #

MarshalFeld (Data Word8) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Word8) Source #

MarshalFeld (Data Word16) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Word16) Source #

MarshalFeld (Data Word32) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Word32) Source #

MarshalFeld (Data Word64) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data Word64) Source #

MarshalFeld (Data (Complex Double)) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data (Complex Double)) Source #

MarshalFeld (Data (Complex Float)) Source # 
Instance details

Defined in Feldspar.Run.Marshal

Associated Types

type HaskellRep (Data (Complex Float)) Source #

PrimType' a => BulkTransferable (Data a) Source # 
Instance details

Defined in Feldspar.Run.Concurrent

Associated Types

type ContainerType (Data a) Source #

PrimType' a => Transferable (Data a) Source # 
Instance details

Defined in Feldspar.Run.Concurrent

Associated Types

type SizeSpec (Data a) Source #

Type a => Storable (Data a) Source # 
Instance details

Defined in Feldspar.Data.Storable

Associated Types

type StoreRep (Data a) Source #

type StoreSize (Data a) Source #

Methods

newStoreRep :: MonadComp m => proxy (Data a) -> StoreSize (Data a) -> m (StoreRep (Data a)) Source #

initStoreRep :: MonadComp m => Data a -> m (StoreRep (Data a)) Source #

readStoreRep :: MonadComp m => StoreRep (Data a) -> m (Data a) Source #

unsafeFreezeStoreRep :: MonadComp m => StoreRep (Data a) -> m (Data a) Source #

writeStoreRep :: MonadComp m => StoreRep (Data a) -> Data a -> m () Source #

Type a => Forcible (Data a) Source # 
Instance details

Defined in Feldspar.Data.Storable

Associated Types

type ValueRep (Data a) Source #

Methods

toValue :: MonadComp m => Data a -> m (ValueRep (Data a)) Source #

fromValue :: ValueRep (Data a) -> Data a Source #

(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 #

Syntactic (Struct PrimType' Data a) Source # 
Instance details

Defined in Feldspar.Representation

Associated Types

type Domain (Struct PrimType' Data a) :: Type -> Type #

type Internal (Struct PrimType' Data a) #

type FreePred Data Source # 
Instance details

Defined in Feldspar.Representation

type Internal (Data a) Source # 
Instance details

Defined in Feldspar.Representation

type Internal (Data a) = a
type Domain (Data a) Source # 
Instance details

Defined in Feldspar.Representation

type HaskellRep (Data Double) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Float) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Int8) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Int16) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Int32) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Int64) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Word8) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Word16) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Word32) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data Word64) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data (Complex Double)) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type HaskellRep (Data (Complex Float)) Source # 
Instance details

Defined in Feldspar.Run.Marshal

type ContainerType (Data a) Source # 
Instance details

Defined in Feldspar.Run.Concurrent

type ContainerType (Data a) = DArr a
type SizeSpec (Data a) Source # 
Instance details

Defined in Feldspar.Run.Concurrent

type StoreRep (Data a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type StoreRep (Data a) = DRef a
type StoreSize (Data a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type StoreSize (Data a) = ()
type ValueRep (Data a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type ValueRep (Data a) = Data a
type Internal (Struct PrimType' Data a) Source # 
Instance details

Defined in Feldspar.Representation

type Domain (Struct PrimType' Data a) Source # 
Instance details

Defined in Feldspar.Representation

class (Syntactic a, Domain a ~ FeldDomain, Type (Internal a)) => Syntax a Source #

Specialization of the Syntactic class for the Feldspar domain

Instances

Instances details
(Syntactic a, Domain a ~ FeldDomain, Type (Internal a)) => Syntax a Source # 
Instance details

Defined in Feldspar.Representation

sugarSymFeld :: (Signature sig, fi ~ SmartFun FeldDomain sig, sig ~ SmartSig fi, FeldDomain ~ SmartSym fi, SyntacticN f fi, sub :<: FeldConstructs, Type (DenResult sig)) => sub sig -> f Source #

Make a smart constructor for a symbol

sugarSymFeldPrim :: (Signature sig, fi ~ SmartFun FeldDomain sig, sig ~ SmartSig fi, FeldDomain ~ SmartSym fi, SyntacticN f fi, sub :<: FeldConstructs, PrimType' (DenResult sig)) => sub sig -> f Source #

Make a smart constructor for a symbol

Monadic computations

data AssertCMD fs a where Source #

Constructors

Assert :: AssertionLabel -> exp Bool -> String -> AssertCMD (Param3 prog exp pred) () 

Instances

Instances details
HFunctor (AssertCMD :: (k -> Type, (Type -> Type, (k2, Type))) -> Type -> Type) Source # 
Instance details

Defined in Feldspar.Representation

Methods

hfmap :: forall f g (fs :: k1) (a :: k20). (forall (b :: k0). f b -> g b) -> AssertCMD '(f, fs) a -> AssertCMD '(g, fs) a #

HBifunctor (AssertCMD :: (Type -> Type, (Type -> Type, (k2, Type))) -> Type -> Type) Source # 
Instance details

Defined in Feldspar.Representation

Methods

hbimap :: forall f g i j (fs :: k1) (a :: k20). (Functor f, Functor g) => (forall b. f b -> g b) -> (forall (b :: k). i b -> j b) -> AssertCMD '(f, '(i, fs)) a -> AssertCMD '(g, '(j, fs)) a #

ControlCMD :<: instr => Reexpressible (AssertCMD :: (Type -> Type, (Type -> Type, (Type -> Constraint, Type))) -> Type -> Type) (instr :: (Type -> Type, (Type -> Type, (Type -> Constraint, Type))) -> Type -> Type) Env Source # 
Instance details

Defined in Feldspar.Run.Compile

Methods

reexpressInstrEnv :: forall (m :: Type -> Type) exp1 exp2 (fs :: k1) a. Monad m => (forall (b :: k). exp1 b -> ReaderT Env (ProgramT instr '(exp2, fs) m) (exp2 b)) -> AssertCMD '(ReaderT Env (ProgramT instr '(exp2, fs) m), '(exp1, fs)) a -> ReaderT Env (ProgramT instr '(exp2, fs) m) a #

InterpBi (AssertCMD :: (Type -> Type, (Type -> Type, (Type -> Constraint, Type))) -> Type -> Type) IO (Param1 PrimType') Source # 
Instance details

Defined in Feldspar.Representation

Methods

interpBi :: forall (a :: k). AssertCMD '(IO, '(IO, Param1 PrimType')) a -> IO a #

newtype Comp a Source #

Monad for computational effects: mutable data structures and control flow

Constructors

Comp 

Instances

Instances details
Monad Comp Source # 
Instance details

Defined in Feldspar.Representation

Methods

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

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

return :: a -> Comp a #

Functor Comp Source # 
Instance details

Defined in Feldspar.Representation

Methods

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

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

Applicative Comp Source # 
Instance details

Defined in Feldspar.Representation

Methods

pure :: a -> Comp a #

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

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

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

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

MonadComp Comp Source # 
Instance details

Defined in Feldspar.Frontend

Methods

liftComp :: Comp a -> Comp a Source #

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

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

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

MonadRun Comp Source # 
Instance details

Defined in Feldspar.Run.Representation

Methods

liftRun :: Comp a -> Run a Source #

Syntax a => Storable (Push Comp a) Source # 
Instance details

Defined in Feldspar.Data.Storable

Associated Types

type StoreRep (Push Comp a) Source #

type StoreSize (Push Comp a) Source #

type StoreRep (Push Comp a) Source # 
Instance details

Defined in Feldspar.Data.Storable

type StoreRep (Push Comp a) = (DRef Length, Arr a)
type StoreSize (Push Comp a) Source # 
Instance details

Defined in Feldspar.Data.Storable

Interpretation

eval :: (Syntactic a, Domain a ~ FeldDomain) => a -> Internal a Source #

Evaluate a closed expression