Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- genType :: MonadAlpha m => m Type
- genVarName :: MonadAlpha m => VarName -> m VarName
- genVarName' :: MonadAlpha m => m VarName
- genVarName'' :: MonadAlpha m => Expr -> m VarName
- mapSubTypesM :: Monad m => (Type -> m Type) -> Type -> m Type
- mapTypeLiteralM :: Monad m => (Type -> m Type) -> Literal -> m Literal
- mapTypeExprM :: Monad m => (Type -> m Type) -> Expr -> m Expr
- mapTypeExpr :: (Type -> Type) -> Expr -> Expr
- mapTypeToplevelExprM :: Monad m => (Type -> m Type) -> ToplevelExpr -> m ToplevelExpr
- mapTypeProgramM :: Monad m => (Type -> m Type) -> Program -> m Program
- mapTypeProgram :: (Type -> Type) -> Program -> Program
- mapSubExprM' :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> ([(VarName, Type)] -> Expr -> m Expr) -> [(VarName, Type)] -> Expr -> m Expr
- mapToplevelExprM' :: Monad m => ([(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr) -> ([(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr) -> [(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr
- mapExprToplevelExprM :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> [(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr
- mapExprProgramM :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> Program -> m Program
- mapSubExprM :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> [(VarName, Type)] -> Expr -> m Expr
- mapSubExpr :: ([(VarName, Type)] -> Expr -> Expr) -> [(VarName, Type)] -> Expr -> Expr
- mapExprToplevelExpr :: ([(VarName, Type)] -> Expr -> Expr) -> [(VarName, Type)] -> ToplevelExpr -> ToplevelExpr
- mapExprProgram :: ([(VarName, Type)] -> Expr -> Expr) -> Program -> Program
- mapToplevelExprM :: Monad m => ([(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr) -> [(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr
- mapToplevelExprProgramM :: Monad m => ([(VarName, Type)] -> Program -> m Program) -> Program -> m Program
- mapToplevelExprProgram :: ([(VarName, Type)] -> Program -> Program) -> Program -> Program
- listSubExprs :: Expr -> [Expr]
- uncurryFunTy :: Type -> ([Type], Type)
- uncurryLam :: Expr -> ([(VarName, Type)], Expr)
- curryApp :: Expr -> (Expr, [Expr])
- curryFunTy :: [Type] -> Type -> Type
- curryLam :: [(VarName, Type)] -> Expr -> Expr
- uncurryApp :: Expr -> [Expr] -> Expr
- isVectorTy :: Type -> Bool
- isVectorTy' :: [Type] -> Bool
- sizeOfVectorTy :: Type -> Maybe Int
- isMatrixTy :: Type -> Bool
- isMatrixTy' :: [Type] -> Bool
- sizeOfMatrixTy :: Type -> Maybe (Int, Int)
- isConstantTimeBuiltin :: Builtin -> Bool
- isLiteral :: Expr -> Bool
- isConstantTimeExpr :: Expr -> Bool
- replaceLenF :: MonadError Error m => VarName -> VarName -> Integer -> Expr -> m Expr
- getRecurrenceFormulaBase :: Expr -> ([Expr], Expr)
- hoistMaybe :: Applicative m => Maybe a -> MaybeT m a
Documentation
genType :: MonadAlpha m => m Type Source #
genVarName :: MonadAlpha m => VarName -> m VarName Source #
genVarName' :: MonadAlpha m => m VarName Source #
genVarName'' :: MonadAlpha m => Expr -> m VarName Source #
mapTypeToplevelExprM :: Monad m => (Type -> m Type) -> ToplevelExpr -> m ToplevelExpr Source #
mapSubExprM' :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> ([(VarName, Type)] -> Expr -> m Expr) -> [(VarName, Type)] -> Expr -> m Expr Source #
mapSubExprM
` substitutes exprs using given two functions, which are called in pre-order and post-order.
mapToplevelExprM' :: Monad m => ([(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr) -> ([(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr) -> [(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr Source #
mapExprToplevelExprM :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> [(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr Source #
mapExprProgramM :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> Program -> m Program Source #
mapSubExprM :: Monad m => ([(VarName, Type)] -> Expr -> m Expr) -> [(VarName, Type)] -> Expr -> m Expr Source #
mapSubExprM
is a wrapper of mapSubExprM
`. This function works in post-order.
mapExprToplevelExpr :: ([(VarName, Type)] -> Expr -> Expr) -> [(VarName, Type)] -> ToplevelExpr -> ToplevelExpr Source #
mapExprProgram :: ([(VarName, Type)] -> Expr -> Expr) -> Program -> Program Source #
mapExprProgram f prog
applies f
to each root exprs in prog
.
This doesn't run into sub-exprs. For example, toplevel-let x = (e1 + e2) in ...
becomes toplevel-let x = (f (e1 + e2)) in ...
, instead of toplevel-let x = (f (f e1 + f e2)) in ...
mapToplevelExprM :: Monad m => ([(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr) -> [(VarName, Type)] -> ToplevelExpr -> m ToplevelExpr Source #
mapToplevelExprM
is a wrapper of mapToplevelExprM
`. This function works in post-order.
mapToplevelExprProgramM :: Monad m => ([(VarName, Type)] -> Program -> m Program) -> Program -> m Program Source #
listSubExprs :: Expr -> [Expr] Source #
isVectorTy :: Type -> Bool Source #
isVectorTy' :: [Type] -> Bool Source #
isMatrixTy :: Type -> Bool Source #
isMatrixTy' :: [Type] -> Bool Source #
isConstantTimeBuiltin :: Builtin -> Bool Source #
isConstantTimeExpr :: Expr -> Bool Source #
isConstantTimeExpr
checks whether given exprs are suitable to propagate.
replaceLenF :: MonadError Error m => VarName -> VarName -> Integer -> Expr -> m Expr Source #
replaceLenF
replaces len(f)
in an expr with i + k
.
* This assumes that there are no name conflicts.
getRecurrenceFormulaBase :: Expr -> ([Expr], Expr) Source #
getRecurrenceFormulaBase
makes a pair ((a_0, ..., a_{k - 1}), a)
from setat (... (setat a 0 a_0) ...) (k - 1) a_{k - 1})
.
hoistMaybe :: Applicative m => Maybe a -> MaybeT m a Source #