Jikka-5.6.0.0: A transpiler from Python to C++ for competitive programming
Safe HaskellNone
LanguageHaskell2010

Jikka.Core.Language.Util

Synopsis

Documentation

mapSubTypesM :: Monad m => (Type -> m Type) -> Type -> m Type Source #

mapTypeExprM :: Monad m => (Type -> m Type) -> Expr -> m Expr 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.

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.

mapSubExpr :: ([(VarName, Type)] -> Expr -> Expr) -> [(VarName, Type)] -> Expr -> Expr 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.

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}).