Copyright | (c) 2012 Michael Sloan |
---|---|
License | BSD-style (see the LICENSE file) |
Maintainer | Michael Sloan <mgsloan@gmail.com> |
Stability | experimental |
Portability | GHC only |
Safe Haskell | None |
Language | Haskell98 |
This module is used to generate operators that follow the plumbers symbolic convention for routing parameters.
- data PlumberSpec = PlumberSpec {
- plumberOpE :: Exp -> Exp -> Exp
- plumberTypes :: Maybe PlumberTypes
- plumberArities :: [Int]
- plumberPrefix :: String
- baseSpec :: String -> String -> PlumberSpec
- data PlumberTypes = PlumberTypes {}
- baseTypes :: PlumberTypes
- implementPlumbers :: PlumberSpec -> DecsQ
- implementPlumber :: PlumberSpec -> String -> DecsQ
- operatorNames :: PlumberSpec -> [[String]]
- aritiesString :: PlumberSpec -> String
- appsT :: [Type] -> Type
- arrowsT :: [Type] -> Type
- tuplesT :: [Type] -> Type
- mkVE :: String -> Exp
- mkVP :: String -> Pat
- mkVT :: String -> Type
- mkVB :: String -> TyVarBndr
- addForalls :: Type -> Type -> Type
Documentation
data PlumberSpec Source #
Specifies all of the information needed to implement a plumber.
PlumberSpec | |
|
baseSpec :: String -> String -> PlumberSpec Source #
Creates a plumber spec for the given prefix for the generated operators, and the name of the infix operator to use to construct the implementation.
data PlumberTypes Source #
Specifies all of the information needed to construct type declarations for the plumber.
baseTypes :: PlumberTypes Source #
A basic set of types, which make r' the left type, and r'' the right type. The resultType is a forall that introduces these type variables, and has undefined content. Therefore any implementation in terms of baseTypes needs to redefine resultType, as the Forall has undefined as its content.
implementPlumbers :: PlumberSpec -> DecsQ Source #
Implements all of the plumbers specified by the given PlumberSpec
.
implementPlumber :: PlumberSpec -> String -> DecsQ Source #
Implement only the specific plumber requested.
operatorNames :: PlumberSpec -> [[String]] Source #
All of the operator names that the given PlumberSpec would implement.
aritiesString :: PlumberSpec -> String Source #
For now this is just a string-yielding function, to be evaluated by the user, to generate the line defining the fixities. This code should be pasted below the TH invocation of implementPlumbers