| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Language.Haskell.TH.Natural.Syntax.Expr.Untyped.Class
Synopsis
- class IsExprBuilder st where
- type Definition st
- addDeconstruct :: forall (step :: BuilderStep). Deconstruct -> Builder st step 'Empty ()
- addLet :: forall (step :: BuilderStep). Binding -> Builder st step 'Empty ()
- letCount :: forall {k} (step :: k). Builder st step step Int
- returns :: forall b (step :: BuilderStep). GenExpr b => b -> Builder st step 'Ready ()
- runExprBuilder :: forall (step :: BuilderStep). Builder st step 'Ready () -> Definition st
- letBind :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => b -> Builder st step 'Empty Exp
- strictLetBind :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => b -> Builder st step 'Empty Exp
- letBind_ :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Bool -> b -> Builder st step 'Empty Exp
- getField :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Name -> Int -> b -> Builder st step 'Empty Exp
- getTupleField :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Int -> Int -> b -> Builder st step 'Empty Exp
- getFields :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Name -> Int -> b -> Builder st step 'Empty [Exp]
- getTupleFields :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Int -> b -> Builder st step 'Empty [Exp]
- getField' :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Name -> Int -> b -> (Pat -> Q Pat) -> Builder st step 'Empty Exp
- getField_ :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Name -> Int -> Int -> b -> Builder st step 'Empty Exp
- getTupleField' :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Int -> Int -> b -> (Pat -> Q Pat) -> Builder st step 'Empty Exp
- getField'' :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Either Int Name -> Int -> Maybe Int -> b -> (Pat -> Q Pat) -> Builder st step 'Empty Exp
- strict :: Pat -> Q Pat
Documentation
class IsExprBuilder st where Source #
Typeclass to factorise the common behaviour of expression builders
Associated Types
type Definition st Source #
Methods
addDeconstruct :: forall (step :: BuilderStep). Deconstruct -> Builder st step 'Empty () Source #
addLet :: forall (step :: BuilderStep). Binding -> Builder st step 'Empty () Source #
letCount :: forall {k} (step :: k). Builder st step step Int Source #
returns :: forall b (step :: BuilderStep). GenExpr b => b -> Builder st step 'Ready () Source #
runExprBuilder :: forall (step :: BuilderStep). Builder st step 'Ready () -> Definition st Source #
Instances
Let
letBind :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => b -> Builder st step 'Empty Exp Source #
Let-Bind an expression
strictLetBind :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => b -> Builder st step 'Empty Exp Source #
Let-Bind an expression with a strict pattern
letBind_ :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Bool -> b -> Builder st step 'Empty Exp Source #
Deconstruction
Arguments
| :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) | |
| => Name | Constructor name |
| -> Int | index of the field |
| -> b | Expr to deconstruct |
| -> Builder st step 'Empty Exp |
Deconstruct a value and get the nth field of the constructor
Arguments
| :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) | |
| => Int | Tuple size |
| -> Int | Field Index |
| -> b | |
| -> Builder st step 'Empty Exp |
Like getField, but for tuples
Arguments
| :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) | |
| => Name | |
| -> Int | Field count |
| -> b | |
| -> Builder st step 'Empty [Exp] |
Deconstruct and get all the fields in the constructor
Arguments
| :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) | |
| => Int | Tuple size |
| -> b | |
| -> Builder st step 'Empty [Exp] |
Same as getFields, but for tuples
getField' :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) => Name -> Int -> b -> (Pat -> Q Pat) -> Builder st step 'Empty Exp Source #
Same as getField, but allow customising the bound pattern
Arguments
| :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) | |
| => Name | |
| -> Int | The index of the field to get |
| -> Int | The number of fields in the constructor |
| -> b | |
| -> Builder st step 'Empty Exp |
Similar to getField. Useful when the constructor to use isn't accessible through reify
Arguments
| :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) | |
| => Int | Tuple size |
| -> Int | Field Index |
| -> b | |
| -> (Pat -> Q Pat) | |
| -> Builder st step 'Empty Exp |
Like 'getField'', but for tuples
Arguments
| :: forall st b (step :: BuilderStep). (IsExprBuilder st, GenExpr b) | |
| => Either Int Name | The constructor used to deconstruct |
| -> Int | The index of the field in the constructor |
| -> Maybe Int | The number of fields in the constructor, if known | The expression to deconstruct |
| -> b | |
| -> (Pat -> Q Pat) | Modify the created pattern (e.g. add BangP or type annotation) |
| -> Builder st step 'Empty Exp |