| Copyright | (c) Kimiyuki Onaka 2020 | 
|---|---|
| License | Apache License 2.0 | 
| Maintainer | kimiyuki95@gmail.com | 
| Stability | experimental | 
| Portability | portable | 
| Safe Haskell | Safe-Inferred | 
| Language | Haskell2010 | 
Jikka.CPlusPlus.Language.Expr
Description
Expr module has the basic data types for C++ language.
 The data types are intended to use for the code generation.
Documentation
Constructors
| VarName OccName NameFlavour (Maybe NameHint) | 
formatVarName :: VarName -> String Source #
formatFunName :: FunName -> String Source #
Constructors
| TyAuto | auto  | 
| TyVoid | void  | 
| TyBool | bool  | 
| TyInt | int  | 
| TyInt32 | int32_t  | 
| TyInt64 | int64_t  | 
| TyTuple [Type] | std::tuple<T1, T2, ...>  | 
| TyVector Type | std::vector<T>  | 
| TyArray Type Integer | std::arrya<T, n>  | 
| TyString | std::string  | 
| TyFunction Type [Type] | std::function<Tr (T1, T2, ...)>  | 
| TyConvexHullTrick | jikka::convex_hull_trick  | 
| TySegmentTree Monoid' | atcoder::segtree<T, op, e>  | 
| TyIntValue Integer | an integer   | 
Constructors
| MonoidIntPlus | \((\mathbb{Z}, +, 0)\)  | 
| MonoidIntMin | \((\mathrm{int64\_t}, \min, \mathrm{INT64\_MAX})\)  | 
| MonoidIntMax | \((\mathrm{int64\_t}, \max, \mathrm{INT64\_MIN})\)  | 
| MonoidIntGcd | \((\mathbb{Z}, \gcd, 0)\)  | 
| MonoidIntLcm | \((\mathbb{Z}, \mathrm{lcm}, 1)\)  | 
Constructors
| Function FunName [Type] | other functions  | 
| Method FunName | other methods  | 
| At | subscription   | 
| SetAt Type | updated array   | 
| Cast Type | cast   | 
| StdTuple [Type] | functio   | 
| StdGet Integer | function   | 
| ArrayExt Type | std::array<T, n>{e1, e2, ..., en} | 
| VecExt Type | std::vector<T>{e1, e2, ...} | 
| VecCtor Type | constructors   | 
| Range | function   | 
| MethodSize | 
  | 
| ConvexHullTrickCtor | the constructor of   | 
| ConvexHullTrickCopyAddLine | This makes a copy of   | 
| SegmentTreeCtor Monoid' | the constructors of   | 
| SegmentTreeCopySetPoint Monoid' | This makes a copy of   | 
Constructors
| Add | +  | 
| Sub | -  | 
| Mul | *  | 
| Div | /  | 
| Mod | %  | 
| BitAnd | &  | 
| BitOr | |  | 
| BitXor | ^  | 
| BitLeftShift | <<  | 
| BitRightShift | >>  | 
| And | 
  | 
| Or | 
  | 
| LessThan | <  | 
| LessEqual | <=  | 
| GreaterThan | >  | 
| GreaterEqual | >=  | 
| Equal | ==  | 
| NotEqual | !=  | 
Constructors
| SimpleAssign | =  | 
| AddAssign | +=  | 
| SubAssign | -=  | 
| MulAssign | *=  | 
| DivAssign | /=  | 
| ModAssign | %=  | 
| BitLeftShiftAssign | <<=  | 
| BitRightShiftAssign | >>=  | 
| BitAndAssign | &=  | 
| BitOrAssign | |=  | 
| BitXorAssign | ^=  | 
Constructors
| Var VarName | |
| Lit Literal | |
| UnOp UnaryOp Expr | |
| BinOp BinaryOp Expr Expr | |
| Cond Expr Expr Expr | e1 ? e2 : e3  | 
| Lam [(Type, VarName)] Type [Statement] | lambda expression   | 
| Call Expr [Expr] | 
  | 
| Callable Function | 
data AssignExpr Source #
Constructors
| AssignExpr AssignOp LeftExpr Expr | e1 = e2  | 
| AssignIncr LeftExpr | ++ e  | 
| AssignDecr LeftExpr | -- e  | 
Instances
| Eq AssignExpr Source # | |
Defined in Jikka.CPlusPlus.Language.Expr  | |
| Ord AssignExpr Source # | |
Defined in Jikka.CPlusPlus.Language.Expr Methods compare :: AssignExpr -> AssignExpr -> Ordering # (<) :: AssignExpr -> AssignExpr -> Bool # (<=) :: AssignExpr -> AssignExpr -> Bool # (>) :: AssignExpr -> AssignExpr -> Bool # (>=) :: AssignExpr -> AssignExpr -> Bool # max :: AssignExpr -> AssignExpr -> AssignExpr # min :: AssignExpr -> AssignExpr -> AssignExpr #  | |
| Read AssignExpr Source # | |
Defined in Jikka.CPlusPlus.Language.Expr Methods readsPrec :: Int -> ReadS AssignExpr # readList :: ReadS [AssignExpr] # readPrec :: ReadPrec AssignExpr # readListPrec :: ReadPrec [AssignExpr] #  | |
| Show AssignExpr Source # | |
Defined in Jikka.CPlusPlus.Language.Expr Methods showsPrec :: Int -> AssignExpr -> ShowS # show :: AssignExpr -> String # showList :: [AssignExpr] -> ShowS #  | |
data DeclareRight Source #
Constructors
| DeclareDefault | T x;  | 
| DeclareCopy Expr | T x = e;  | 
| DeclareInitialize [Expr] | 
  | 
Instances
| Eq DeclareRight Source # | |
Defined in Jikka.CPlusPlus.Language.Expr  | |
| Ord DeclareRight Source # | |
Defined in Jikka.CPlusPlus.Language.Expr Methods compare :: DeclareRight -> DeclareRight -> Ordering # (<) :: DeclareRight -> DeclareRight -> Bool # (<=) :: DeclareRight -> DeclareRight -> Bool # (>) :: DeclareRight -> DeclareRight -> Bool # (>=) :: DeclareRight -> DeclareRight -> Bool # max :: DeclareRight -> DeclareRight -> DeclareRight # min :: DeclareRight -> DeclareRight -> DeclareRight #  | |
| Read DeclareRight Source # | |
Defined in Jikka.CPlusPlus.Language.Expr Methods readsPrec :: Int -> ReadS DeclareRight # readList :: ReadS [DeclareRight] #  | |
| Show DeclareRight Source # | |
Defined in Jikka.CPlusPlus.Language.Expr Methods showsPrec :: Int -> DeclareRight -> ShowS # show :: DeclareRight -> String # showList :: [DeclareRight] -> ShowS #  | |
Constructors
| ExprStatement Expr | e;  | 
| Block [Statement] | { stmt1; stmts2; ...; } | 
| If Expr [Statement] (Maybe [Statement]) | 
  | 
| For Type VarName Expr Expr AssignExpr [Statement] | for (T x = e1; e2; e3) { stmt1; stmts2; ...; } | 
| ForEach Type VarName Expr [Statement] | for (T x : e) { stmt1; stmts2; ...; } | 
| While Expr [Statement] | while (e) { stmt1; stmts2; ...; } | 
| Declare Type VarName DeclareRight | Declarations with/witout initializations. See   | 
| DeclareDestructure [VarName] Expr | auto [x1, x2, ...] = e;  | 
| Assign AssignExpr | e1 op= e2;  | 
| Assert Expr | assert (e);  | 
| Return Expr | return e;  | 
Instances
| Eq Statement Source # | |
| Ord Statement Source # | |
| Read Statement Source # | |
| Show Statement Source # | |
data ToplevelStatement Source #
Constructors
| VarDef Type VarName Expr | const T x = e;  | 
| FunDef Type FunName [(Type, VarName)] [Statement] | T f(T1 x1, T2 x2, ...) { stmt1; stmt2; ... } | 
| StaticAssert Expr String | static_assert(e, msg);  |