| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
Futhark.Builder
Description
This module defines a convenience monad/typeclass for building
ASTs. The fundamental building block is BuilderT and its
execution functions, but it is usually easier to use Builder.
See Futhark.Construct for a high-level description.
Synopsis
- data BuilderT rep (m :: Type -> Type) a
- runBuilderT :: MonadFreshNames m => BuilderT rep m a -> Scope rep -> m (a, Stms rep)
- runBuilderT_ :: MonadFreshNames m => BuilderT rep m () -> Scope rep -> m (Stms rep)
- runBuilderT' :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => BuilderT rep m a -> m (a, Stms rep)
- runBuilderT'_ :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => BuilderT rep m a -> m (Stms rep)
- class ASTRep rep => BuilderOps rep where
- type Builder rep = BuilderT rep (State VNameSource)
- runBuilder :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => Builder rep a -> m (a, Stms rep)
- runBuilder_ :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => Builder rep a -> m (Stms rep)
- runBodyBuilder :: (Buildable rep, MonadFreshNames m, HasScope somerep m, SameScope somerep rep, IsResult res) => Builder rep [res] -> m (GBody rep res)
- runLambdaBuilder :: (Buildable rep, MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => [LParam rep] -> Builder rep Result -> m (Lambda rep)
- module Futhark.Builder.Class
A concrete MonadBuilder monad.
data BuilderT rep (m :: Type -> Type) a Source #
A monad transformer that tracks statements and provides a
MonadBuilder instance, assuming that the underlying monad provides
a name source. In almost all cases, this is what you will use for
constructing statements (possibly as part of a larger monad stack).
If you find yourself needing to implement MonadBuilder from
scratch, then it is likely that you are making a mistake.
Instances
runBuilderT :: MonadFreshNames m => BuilderT rep m a -> Scope rep -> m (a, Stms rep) Source #
Run a builder action given an initial scope, returning a value and
the statements added (addStm) during the action.
runBuilderT_ :: MonadFreshNames m => BuilderT rep m () -> Scope rep -> m (Stms rep) Source #
Like runBuilderT, but return only the statements.
runBuilderT' :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => BuilderT rep m a -> m (a, Stms rep) Source #
Like runBuilderT, but get the initial scope from the current
monad.
runBuilderT'_ :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => BuilderT rep m a -> m (Stms rep) Source #
Like runBuilderT_, but get the initial scope from the current
monad.
class ASTRep rep => BuilderOps rep where Source #
A BuilderT (and by extension, a Builder) is only an instance of
MonadBuilder for representations that implement this type class,
which contains methods for constructing statements.
Minimal complete definition
Nothing
Methods
mkExpDecB :: (MonadBuilder m, Rep m ~ rep) => Pat (LetDec rep) -> Exp rep -> m (ExpDec rep) Source #
default mkExpDecB :: (MonadBuilder m, Buildable rep) => Pat (LetDec rep) -> Exp rep -> m (ExpDec rep) Source #
mkBodyB :: (MonadBuilder m, Rep m ~ rep, IsResult res) => Stms rep -> [res] -> m (GBody rep res) Source #
default mkBodyB :: (MonadBuilder m, Buildable rep, IsResult res) => Stms rep -> [res] -> m (GBody rep res) Source #
mkLetNamesB :: (MonadBuilder m, Rep m ~ rep) => [VName] -> Exp rep -> m (Stm rep) Source #
default mkLetNamesB :: (MonadBuilder m, Rep m ~ rep, Buildable rep) => [VName] -> Exp rep -> m (Stm rep) Source #
Instances
| BuilderOps GPU Source # | |
Defined in Futhark.IR.GPU Methods mkExpDecB :: (MonadBuilder m, Rep m ~ GPU) => Pat (LetDec GPU) -> Exp GPU -> m (ExpDec GPU) Source # mkBodyB :: (MonadBuilder m, Rep m ~ GPU, IsResult res) => Stms GPU -> [res] -> m (GBody GPU res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ GPU) => [VName] -> Exp GPU -> m (Stm GPU) Source # | |
| BuilderOps GPUMem Source # | |
Defined in Futhark.IR.GPUMem Methods mkExpDecB :: (MonadBuilder m, Rep m ~ GPUMem) => Pat (LetDec GPUMem) -> Exp GPUMem -> m (ExpDec GPUMem) Source # mkBodyB :: (MonadBuilder m, Rep m ~ GPUMem, IsResult res) => Stms GPUMem -> [res] -> m (GBody GPUMem res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ GPUMem) => [VName] -> Exp GPUMem -> m (Stm GPUMem) Source # | |
| BuilderOps MC Source # | |
Defined in Futhark.IR.MC | |
| BuilderOps MCMem Source # | |
Defined in Futhark.IR.MCMem Methods mkExpDecB :: (MonadBuilder m, Rep m ~ MCMem) => Pat (LetDec MCMem) -> Exp MCMem -> m (ExpDec MCMem) Source # mkBodyB :: (MonadBuilder m, Rep m ~ MCMem, IsResult res) => Stms MCMem -> [res] -> m (GBody MCMem res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ MCMem) => [VName] -> Exp MCMem -> m (Stm MCMem) Source # | |
| BuilderOps SOACS Source # | |
Defined in Futhark.IR.SOACS Methods mkExpDecB :: (MonadBuilder m, Rep m ~ SOACS) => Pat (LetDec SOACS) -> Exp SOACS -> m (ExpDec SOACS) Source # mkBodyB :: (MonadBuilder m, Rep m ~ SOACS, IsResult res) => Stms SOACS -> [res] -> m (GBody SOACS res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ SOACS) => [VName] -> Exp SOACS -> m (Stm SOACS) Source # | |
| BuilderOps Seq Source # | |
Defined in Futhark.IR.Seq Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Seq) => Pat (LetDec Seq) -> Exp Seq -> m (ExpDec Seq) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Seq, IsResult res) => Stms Seq -> [res] -> m (GBody Seq res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Seq) => [VName] -> Exp Seq -> m (Stm Seq) Source # | |
| BuilderOps SeqMem Source # | |
Defined in Futhark.IR.SeqMem Methods mkExpDecB :: (MonadBuilder m, Rep m ~ SeqMem) => Pat (LetDec SeqMem) -> Exp SeqMem -> m (ExpDec SeqMem) Source # mkBodyB :: (MonadBuilder m, Rep m ~ SeqMem, IsResult res) => Stms SeqMem -> [res] -> m (GBody SeqMem res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ SeqMem) => [VName] -> Exp SeqMem -> m (Stm SeqMem) Source # | |
| (ASTRep rep, AliasedOp (OpC rep), Buildable (Aliases rep)) => BuilderOps (Aliases rep) Source # | |
Defined in Futhark.IR.Aliases Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Aliases rep) => Pat (LetDec (Aliases rep)) -> Exp (Aliases rep) -> m (ExpDec (Aliases rep)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Aliases rep, IsResult res) => Stms (Aliases rep) -> [res] -> m (GBody (Aliases rep) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Aliases rep) => [VName] -> Exp (Aliases rep) -> m (Stm (Aliases rep)) Source # | |
| BuilderOps (Wise GPU) Source # | |
Defined in Futhark.IR.GPU.Simplify Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Wise GPU) => Pat (LetDec (Wise GPU)) -> Exp (Wise GPU) -> m (ExpDec (Wise GPU)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Wise GPU, IsResult res) => Stms (Wise GPU) -> [res] -> m (GBody (Wise GPU) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Wise GPU) => [VName] -> Exp (Wise GPU) -> m (Stm (Wise GPU)) Source # | |
| BuilderOps (Wise GPUMem) Source # | |
Defined in Futhark.IR.GPUMem Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Wise GPUMem) => Pat (LetDec (Wise GPUMem)) -> Exp (Wise GPUMem) -> m (ExpDec (Wise GPUMem)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Wise GPUMem, IsResult res) => Stms (Wise GPUMem) -> [res] -> m (GBody (Wise GPUMem) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Wise GPUMem) => [VName] -> Exp (Wise GPUMem) -> m (Stm (Wise GPUMem)) Source # | |
| BuilderOps (Wise MC) Source # | |
Defined in Futhark.IR.MC Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Wise MC) => Pat (LetDec (Wise MC)) -> Exp (Wise MC) -> m (ExpDec (Wise MC)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Wise MC, IsResult res) => Stms (Wise MC) -> [res] -> m (GBody (Wise MC) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Wise MC) => [VName] -> Exp (Wise MC) -> m (Stm (Wise MC)) Source # | |
| BuilderOps (Wise MCMem) Source # | |
Defined in Futhark.IR.MCMem Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Wise MCMem) => Pat (LetDec (Wise MCMem)) -> Exp (Wise MCMem) -> m (ExpDec (Wise MCMem)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Wise MCMem, IsResult res) => Stms (Wise MCMem) -> [res] -> m (GBody (Wise MCMem) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Wise MCMem) => [VName] -> Exp (Wise MCMem) -> m (Stm (Wise MCMem)) Source # | |
| BuilderOps (Wise SOACS) Source # | |
Defined in Futhark.IR.SOACS.Simplify Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Wise SOACS) => Pat (LetDec (Wise SOACS)) -> Exp (Wise SOACS) -> m (ExpDec (Wise SOACS)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Wise SOACS, IsResult res) => Stms (Wise SOACS) -> [res] -> m (GBody (Wise SOACS) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Wise SOACS) => [VName] -> Exp (Wise SOACS) -> m (Stm (Wise SOACS)) Source # | |
| BuilderOps (Wise Seq) Source # | |
Defined in Futhark.IR.Seq Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Wise Seq) => Pat (LetDec (Wise Seq)) -> Exp (Wise Seq) -> m (ExpDec (Wise Seq)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Wise Seq, IsResult res) => Stms (Wise Seq) -> [res] -> m (GBody (Wise Seq) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Wise Seq) => [VName] -> Exp (Wise Seq) -> m (Stm (Wise Seq)) Source # | |
| BuilderOps (Wise SeqMem) Source # | |
Defined in Futhark.IR.SeqMem Methods mkExpDecB :: (MonadBuilder m, Rep m ~ Wise SeqMem) => Pat (LetDec (Wise SeqMem)) -> Exp (Wise SeqMem) -> m (ExpDec (Wise SeqMem)) Source # mkBodyB :: (MonadBuilder m, Rep m ~ Wise SeqMem, IsResult res) => Stms (Wise SeqMem) -> [res] -> m (GBody (Wise SeqMem) res) Source # mkLetNamesB :: (MonadBuilder m, Rep m ~ Wise SeqMem) => [VName] -> Exp (Wise SeqMem) -> m (Stm (Wise SeqMem)) Source # | |
runBuilder :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => Builder rep a -> m (a, Stms rep) Source #
Run a builder action, returning a value and the statements added
(addStm) during the action. Assumes that the current monad
provides initial scope and name source.
runBuilder_ :: (MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => Builder rep a -> m (Stms rep) Source #
Like runBuilder, but throw away the result and just return the
added statements.
runBodyBuilder :: (Buildable rep, MonadFreshNames m, HasScope somerep m, SameScope somerep rep, IsResult res) => Builder rep [res] -> m (GBody rep res) Source #
Run a builder that produces a Result and construct a body that
contains that result alongside the statements produced during the
builder.
runLambdaBuilder :: (Buildable rep, MonadFreshNames m, HasScope somerep m, SameScope somerep rep) => [LParam rep] -> Builder rep Result -> m (Lambda rep) Source #
Given lambda parameters, Run a builder action that produces the
statements and returns the Result of the lambda body.
The MonadBuilder typeclass
module Futhark.Builder.Class