-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Higher-order file applicator
--
-- λtext is a general-purpose templating utility for text files.
--
-- Turn plaintext files into lambdas - function application then becomes
-- concatenation.
--
-- Please see the github page for more details.
@package ltext
@version 0.0.0.2
module LText.Parser.Lexer
data ExprTokens
[TLamb] :: ExprTokens
[TArrow] :: ExprTokens
[TLParen] :: ExprTokens
[TRParen] :: ExprTokens
[TIdent] :: String -> ExprTokens
[TGroup] :: [ExprTokens] -> ExprTokens
data FollowingToken
[FollowsBackslash] :: FollowingToken
data TokenState
[TokenState] :: Maybe FollowingToken -> TokenState
[following] :: TokenState -> Maybe FollowingToken
initTokenState :: TokenState
runTokens :: (Monad m, MonadError String m) => StateT TokenState m a -> m a
tokenize :: (MonadState TokenState m, MonadError String m) => String -> m [ExprTokens]
runGroup :: (Monad m, MonadError String m) => StateT Integer m a -> m a
-- | Matches brackets and nests token streams
group :: (MonadState Integer m) => ([ExprTokens], [ExprTokens]) -> m ([ExprTokens], [ExprTokens])
lexer :: (Monad m, MonadError String m) => String -> m [ExprTokens]
instance Eq TokenState
instance Show TokenState
instance Eq FollowingToken
instance Show FollowingToken
instance Eq ExprTokens
instance Show ExprTokens
module LText.Internal.Classes
class SetLike (c :: * -> *)
empty :: SetLike c => c a
union :: (SetLike c, Ord a) => c a -> c a -> c a
intersection :: (SetLike c, Ord a) => c a -> c a -> c a
difference :: (SetLike c, Ord a) => c a -> c a -> c a
class (SetLike vars) => Bindable vars name a
fv :: Bindable vars name a => a -> vars name
class (SetLike (subst name)) => Substitutable subst name domain a
apply :: Substitutable subst name domain a => subst name domain -> a -> a
instance Ord k => SetLike (Map k)
instance SetLike Set
instance (Foldable f, Ord name, Bindable vars name a) => Bindable vars name (f a)
instance (Functor f, Substitutable subst name domain a) => Substitutable subst name domain (f a)
module LText.Internal.Types
type TypeVar = String
data Type
[TVar] :: TypeVar -> Type
[TFun] :: Type -> Type -> Type
[TText] :: Type
data Prenex
[Prenex] :: [TypeVar] -> Type -> Prenex
type Subst name domain = Map name domain
nullSubst :: Subst TypeVar Type
composeSubst :: Subst TypeVar Type -> Subst TypeVar Type -> Subst TypeVar Type
prType :: Type -> Doc
prParenType :: Type -> Doc
prPrenex :: Prenex -> Doc
instance Ord Type
instance Eq Type
instance Bindable Set TypeVar Type
instance Substitutable Map TypeVar Type Type
instance Bindable Set TypeVar Prenex
instance Substitutable Map TypeVar Type Prenex
instance Show Type
instance Show Prenex
module LText.Internal.Expr
type Span = (FilePath, Text)
type ExprVar = String
data Expr
[EVar] :: ExprVar -> Expr
[EApp] :: Expr -> Expr -> Expr
[EAbs] :: ExprVar -> Expr -> Expr
[ELet] :: ExprVar -> Expr -> Expr -> Expr
[EText] :: [Span] -> Expr
[EConc] :: Expr -> Expr -> Expr
data AnnExpr
[AAbs] :: (String, Type) -> (AnnExpr, Type) -> AnnExpr
[AApp] :: (AnnExpr, Type) -> (AnnExpr, Type) -> AnnExpr
[AVar] :: (String, Type) -> AnnExpr
[AText] :: [(FilePath, Text)] -> AnnExpr
[AConc] :: (AnnExpr, Type) -> (AnnExpr, Type) -> AnnExpr
prExp :: Expr -> Doc
prParenExp :: Expr -> Doc
instance Eq AnnExpr
instance Show AnnExpr
instance Ord Expr
instance Eq Expr
instance Bindable Set ExprVar Expr
instance Substitutable Map ExprVar Expr Expr
instance Show Expr
module LText.Parser.Expr
data ParseState
[ParseState] :: Bool -> Bool -> Maybe Expr -> ParseState
[inLambdaDec] :: ParseState -> Bool
[isFreshScope] :: ParseState -> Bool
[exprSoFar] :: ParseState -> Maybe Expr
initParseState :: ParseState
runParse :: (Monad m, MonadError String m) => StateT ParseState m a -> m a
-- | Parser for expressions. Note - cannot parse EConc or
-- EText constructors - they are implicit, and not considered in
-- evaluation.
parseExpr :: (MonadState ParseState m, MonadError String m) => [ExprTokens] -> m Expr
makeExpr :: (Monad m, MonadError String m) => String -> m Expr
testParse :: Monad m => String -> m Expr
instance Eq ParseState
instance Show ParseState
module LText.Parser.Document
type Var = String
type HeaderSchema = (String, [Var], String)
getHeader :: FilePath -> String -> Maybe HeaderSchema
parseDelim :: Monad m => (String, String) -> ParsecT Text u m String
parseDocument :: (MonadIO m, MonadError String m) => FilePath -> Text -> m Expr
module LText.Renderer
type Var = String
type HeaderSchema = (String, [Var], String)
showHeader :: HeaderSchema -> String
-- | turn head of template's arity into list - still need to render inner
-- expressions
renderHeaderSchema :: [String] -> (String, String) -> Expr -> (HeaderSchema, Expr)
render :: (Maybe String, Maybe String) -> Expr -> Text
-- | Note - only use post-beta reduction: this function is partial
hasArity :: Expr -> Bool
module LText.Internal.Inference
newtype Context
[Context] :: (Map ExprVar Prenex) -> Context
remove :: Context -> String -> Context
-- | Binds free type variables as universally quantified
generalize :: Context -> Type -> Prenex
data TIState
[TIState] :: Int -> Subst TypeVar Type -> TIState
[tiSupply] :: TIState -> Int
[tiSubst] :: TIState -> Subst TypeVar Type
runTI :: (Monad m, MonadError String m) => StateT TIState m a -> m a
newTyVar :: (Monad m, MonadState TIState m, MonadError String m) => TypeVar -> m Type
-- | Replaces bound type variables with free, fresh ones
instantiate :: (Monad m, MonadState TIState m, MonadError String m) => Prenex -> m Type
-- | Most general unifier
mgu :: (Monad m, MonadState TIState m, MonadError String m) => Type -> Type -> m (Subst TypeVar Type)
-- | Makes a substitution [x -> t]
varBind :: (Monad m, MonadState TIState m, MonadError String m) => TypeVar -> Type -> m (Subst TypeVar Type)
-- | Type inference function
ti :: (Monad m, MonadState TIState m, MonadError String m) => Context -> Expr -> m (Subst TypeVar Type, Type)
typeInference :: (Monad m, MonadState TIState m, MonadError String m) => Context -> Expr -> m Type
test :: (Monad m, MonadIO m) => Expr -> m ()
instance Bindable Set TypeVar Context
instance Substitutable Map TypeVar Type Context
module LText.Internal.Evaluation
runEv :: (Monad m, MonadError String m) => StateT (Int, Bool) m a -> m a
freshExprVar :: (Monad m, MonadState (Int, Bool) m) => String -> m String
reduce :: (Monad m, MonadState (Int, Bool) m) => Expr -> m Expr
alpha :: (Monad m, MonadState (Int, Bool) m) => Expr -> m Expr
module LText.Internal