Jikka-5.5.0.0: A transpiler from Python to C++ for competitive programming
Copyright(c) Kimiyuki Onaka 2020
LicenseApache License 2.0
Maintainerkimiyuki95@gmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Jikka.Core.Language.Expr

Description

Expr module has the basic data types for our core language. They are similar to the GHC Core language.

Synopsis

Documentation

newtype VarName Source #

Constructors

VarName String 

Instances

Instances details
Eq VarName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

(==) :: VarName -> VarName -> Bool #

(/=) :: VarName -> VarName -> Bool #

Data VarName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> VarName -> c VarName #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c VarName #

toConstr :: VarName -> Constr #

dataTypeOf :: VarName -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c VarName) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c VarName) #

gmapT :: (forall b. Data b => b -> b) -> VarName -> VarName #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> VarName -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> VarName -> r #

gmapQ :: (forall d. Data d => d -> u) -> VarName -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> VarName -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> VarName -> m VarName #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> VarName -> m VarName #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> VarName -> m VarName #

Ord VarName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Read VarName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show VarName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

IsString VarName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

fromString :: String -> VarName #

newtype TypeName Source #

Constructors

TypeName String 

Instances

Instances details
Eq TypeName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Data TypeName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> TypeName -> c TypeName #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c TypeName #

toConstr :: TypeName -> Constr #

dataTypeOf :: TypeName -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c TypeName) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TypeName) #

gmapT :: (forall b. Data b => b -> b) -> TypeName -> TypeName #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> TypeName -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> TypeName -> r #

gmapQ :: (forall d. Data d => d -> u) -> TypeName -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> TypeName -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> TypeName -> m TypeName #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> TypeName -> m TypeName #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> TypeName -> m TypeName #

Ord TypeName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Read TypeName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show TypeName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

IsString TypeName Source # 
Instance details

Defined in Jikka.Core.Language.Expr

data Type Source #

Type represents the types of our core language. This is similar to the Type of GHC Core. See also commentarycompilertype-type.

\[ \newcommand\int{\mathbf{int}} \newcommand\bool{\mathbf{bool}} \newcommand\list{\mathbf{list}} \begin{array}{rl} \tau ::= & \alpha \\ \vert & \int \\ \vert & \bool \\ \vert & \list(\tau) \\ \vert & \tau \times \tau \times \dots \times \tau \\ \vert & \tau \to \tau \\ \vert & \mathrm{data\_structure} \end{array} \]

Instances

Instances details
Eq Type Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

(==) :: Type -> Type -> Bool #

(/=) :: Type -> Type -> Bool #

Data Type Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Type -> c Type #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Type #

toConstr :: Type -> Constr #

dataTypeOf :: Type -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Type) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Type) #

gmapT :: (forall b. Data b => b -> b) -> Type -> Type #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Type -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Type -> r #

gmapQ :: (forall d. Data d => d -> u) -> Type -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Type -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Type -> m Type #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Type -> m Type #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Type -> m Type #

Ord Type Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

compare :: Type -> Type -> Ordering #

(<) :: Type -> Type -> Bool #

(<=) :: Type -> Type -> Bool #

(>) :: Type -> Type -> Bool #

(>=) :: Type -> Type -> Bool #

max :: Type -> Type -> Type #

min :: Type -> Type -> Type #

Read Type Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show Type Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

showsPrec :: Int -> Type -> ShowS #

show :: Type -> String #

showList :: [Type] -> ShowS #

data DataStructure Source #

Instances

Instances details
Eq DataStructure Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Data DataStructure Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> DataStructure -> c DataStructure #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c DataStructure #

toConstr :: DataStructure -> Constr #

dataTypeOf :: DataStructure -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c DataStructure) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DataStructure) #

gmapT :: (forall b. Data b => b -> b) -> DataStructure -> DataStructure #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> DataStructure -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> DataStructure -> r #

gmapQ :: (forall d. Data d => d -> u) -> DataStructure -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> DataStructure -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> DataStructure -> m DataStructure #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> DataStructure -> m DataStructure #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> DataStructure -> m DataStructure #

Ord DataStructure Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Read DataStructure Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show DataStructure Source # 
Instance details

Defined in Jikka.Core.Language.Expr

data Semigroup' Source #

Instances

Instances details
Eq Semigroup' Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Data Semigroup' Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Semigroup' -> c Semigroup' #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Semigroup' #

toConstr :: Semigroup' -> Constr #

dataTypeOf :: Semigroup' -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Semigroup') #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Semigroup') #

gmapT :: (forall b. Data b => b -> b) -> Semigroup' -> Semigroup' #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Semigroup' -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Semigroup' -> r #

gmapQ :: (forall d. Data d => d -> u) -> Semigroup' -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Semigroup' -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Semigroup' -> m Semigroup' #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Semigroup' -> m Semigroup' #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Semigroup' -> m Semigroup' #

Ord Semigroup' Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Read Semigroup' Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show Semigroup' Source # 
Instance details

Defined in Jikka.Core.Language.Expr

data Builtin Source #

TODO: What is the difference between Literal and Builtin?

Constructors

Negate

\(: \int \to \int\)

Plus

\(: \int \to \int \to \int\)

Minus

\(: \int \to \int \to \int\)

Mult

\(: \int \to \int \to \int\)

FloorDiv

\(: \int \to \int \to \int\)

FloorMod

\(: \int \to \int \to \int\)

CeilDiv

\(: \int \to \int \to \int\)

CeilMod

\(: \int \to \int \to \int\)

JustDiv

divison which has no remainder \(: \int \to \int \to \int\)

Pow

\(: \int \to \int \to \int\)

Abs

\(: \int \to \int\)

Gcd

\(: \int \to \int \to \int\)

Lcm

\(: \int \to \int \to \int\)

Min2

\(: \forall \alpha. \alpha \to \alpha \to \alpha\)

Max2

\(: \forall \alpha. \alpha \to \alpha \to \alpha\)

Iterate

iterated application \((\lambda k f x. f^k(x)): \forall \alpha. \int \to (\alpha \to \alpha) \to \alpha \to \alpha\)

Not

\(: \bool \to \bool\)

And

\(: \bool \to \bool \to \bool\)

Or

\(: \bool \to \bool \to \bool\)

Implies

\(: \bool \to \bool \to \bool\)

If

\(: \forall \alpha. \bool \to \alpha \to \alpha \to \alpha\)

BitNot

\(: \int \to \int\)

BitAnd

\(: \int \to \int \to \int\)

BitOr

\(: \int \to \int \to \int\)

BitXor

\(: \int \to \int \to \int\)

BitLeftShift

\(: \int \to \int \to \int\)

BitRightShift

\(: \int \to \int \to \int\)

MatAp Integer Integer

matrix application \(: \int^{H \times W} \to \int^W \to \int^H\)

MatZero Integer Integer

zero matrix \(: \to \int^{h \times w}\)

MatOne Integer

unit matrix \(: \to \int^{n \times n}\)

MatAdd Integer Integer

matrix addition \(: \int^{H \times W} \to \int^{H \times W} \to \int^{H \times W}\)

MatMul Integer Integer Integer

matrix multiplication \(: \int^{H \times n} \to \int^{n \times W} \to \int^{H \times W}\)

MatPow Integer

matrix power \(: \int^{n \times n} \to \int \to \int^{n \times n}\)

VecFloorMod Integer

vector point-wise floor-mod \(: \int^{n} \to \int \to \int^{n}\)

MatFloorMod Integer Integer

matrix point-wise floor-mod \(: \int^{H \times W} \to \int \to \int^{H \times W}\)

ModNegate

\(: \int \to \int \to \int\)

ModPlus

\(: \int \to \int \to \int \to \int\)

ModMinus

\(: \int \to \int \to \int \to \int\)

ModMult

\(: \int \to \int \to \int \to \int\)

ModInv

\(: \int \to \int \to \int\)

ModPow

\(: \int \to \int \to \int \to \int\)

ModMatAp Integer Integer

matrix application \(: \int^{H \times W} \to \int^W \to \int \to \int^H\)

ModMatAdd Integer Integer

matrix addition \(: \int^{H \times W} \to \int^{H \times W} \to \int \to \int^{H \times W}\)

ModMatMul Integer Integer Integer

matrix multiplication \(: \int^{H \times n} \to \int^{n \times W} \to \int \to \int^{H \times W}\)

ModMatPow Integer

matrix power \(: \int^{n \times n} \to \int \to \int^{n \times n}\)

Cons

\(: \forall \alpha. \alpha \to \list(\alpha) \to \list(\alpha)\)

Snoc

\(: \forall \alpha. \list(alpha) \to \alpha \to \list(\alpha)\)

Foldl

\(: \forall \alpha \beta. (\beta \to \alpha \to \beta) \to \beta \to \list(\alpha) \to \beta\)

Scanl

\(: \forall \alpha \beta. (\beta \to \alpha \to \beta) \to \beta \to \list(\alpha) \to \list(\beta)\)

Build

\(\lambda f a n.\) repeat a <- snoc a (f a) n times \(: \forall \alpha. (\list(\alpha) \to \alpha) \to \list(\alpha) \to \int \to \list(\alpha)\)

Len

\(: \forall \alpha. \list(\alpha) \to \int\)

Map

\(: \forall \alpha \beta. (\alpha \to \beta) \to \list(\alpha) \to \list(\beta)\)

Filter

\(: \forall \alpha \beta. (\alpha \to \bool) \to \list(\alpha) \to \list(\beta)\)

At

\(: \forall \alpha. \list(\alpha) \to \int \to \alpha\)

SetAt

\(: \forall \alpha. \list(\alpha) \to \int \to \alpha \to \list(\alpha)\)

Elem

\(: \forall \alpha. \alpha \to \list(\alpha) \to \bool\)

Sum

\(: \list(\int) \to \int\)

Product

\(: \list(\int) \to \int\)

ModSum

\(: \list(\int) \to \int \to \int\)

ModProduct

\(: \list(\int) \to \int \to \int\)

Min1

\(: \forall \alpha. \list(\alpha) \to \alpha\)

Max1

\(: \forall \alpha. \list(\alpha) \to \alpha\)

ArgMin

\(: \forall \alpha. \list(\alpha) \to \int\)

ArgMax

\(: \forall \alpha. \list(\alpha) \to \int\)

Gcd1

\(: \list(\int) \to \int\)

Lcm1

\(: \list(\int) \to \int\)

All

\(: \list(\bool) \to \bool\)

Any

\(: \list(\bool) \to \bool\)

Sorted

\(: \forall \alpha. \list(\alpha) \to \list(\alpha)\)

Reversed

\(: \forall \alpha. \list(\alpha) \to \list(\alpha)\)

Range1

\(: \int \to \list(\int)\)

Range2

\(: \int \to \int \to \list(\int)\)

Range3

\(: \int \to \int \to \int \to \list(\int)\)

Tuple

\(: \forall \alpha_0 \alpha_1 \dots \alpha _ {n - 1}. \alpha_0 \to \dots \to \alpha _ {n - 1} \to \alpha_0 \times \dots \times \alpha _ {n - 1}\)

Proj Integer

\(: \forall \alpha_0 \alpha_1 \dots \alpha _ {n - 1}. \alpha_0 \times \dots \times \alpha _ {n - 1} \to \alpha_i\)

Parse may make broken Proj with its list of type arguments is empty. This is fixed by TypeInfer module.

LessThan

\(: \forall \alpha. \alpha \to \alpha \to \bool\)

LessEqual

\(: \forall \alpha. \alpha \to \alpha \to \bool\)

GreaterThan

\(: \forall \alpha. \alpha \to \alpha \to \bool\)

GreaterEqual

\(: \forall \alpha. \alpha \to \alpha \to \bool\)

Equal

\(: \forall \alpha. \alpha \to \alpha \to \bool\)

NotEqual

\(: \forall \alpha. \alpha \to \alpha \to \bool\)

Fact

\(: \int \to \int\)

Choose

\(: \int \to \int \to \int\)

Permute

\(: \int \to \int \to \int\)

MultiChoose

\(: \int \to \int \to \int\)

ConvexHullTrickInit

\(: \mathrm{convex\_hull\_trick}\)

ConvexHullTrickGetMin

\(: \mathrm{convex\_hull\_trick} \to \int \to \int\)

ConvexHullTrickInsert

\(: \mathrm{convex\_hull\_trick} \to \int \to \int \to \mathrm{convex\_hull\_trick}\)

SegmentTreeInitList Semigroup'

\(: \list(S) \to \mathrm{segment\_tree}(S)\) for a semigroup (S)

SegmentTreeGetRange Semigroup'

\(: \mathrm{segment\_tree}(S) \to \int \to \int \to S\) for a semigroup (S)

SegmentTreeSetPoint Semigroup'

\(: \mathrm{segment\_tree}(S) \to \int \to S \to \mathrm{segment\_tree}(S)\) for a semigroup (S)

Instances

Instances details
Eq Builtin Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

(==) :: Builtin -> Builtin -> Bool #

(/=) :: Builtin -> Builtin -> Bool #

Data Builtin Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Builtin -> c Builtin #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Builtin #

toConstr :: Builtin -> Constr #

dataTypeOf :: Builtin -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Builtin) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Builtin) #

gmapT :: (forall b. Data b => b -> b) -> Builtin -> Builtin #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Builtin -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Builtin -> r #

gmapQ :: (forall d. Data d => d -> u) -> Builtin -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Builtin -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Builtin -> m Builtin #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Builtin -> m Builtin #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Builtin -> m Builtin #

Ord Builtin Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Read Builtin Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show Builtin Source # 
Instance details

Defined in Jikka.Core.Language.Expr

data Literal Source #

Constructors

LitBuiltin Builtin [Type] 
LitInt Integer

\(: \forall \alpha. \int\)

LitBool Bool

\(: \forall \alpha. \bool\)

LitNil Type

\(: \forall \alpha. \list(\alpha)\)

LitBottom Type String

\(: \bot : \forall \alpha. \alpha\). The second argument is its error message.

Instances

Instances details
Eq Literal Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

(==) :: Literal -> Literal -> Bool #

(/=) :: Literal -> Literal -> Bool #

Data Literal Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Literal -> c Literal #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Literal #

toConstr :: Literal -> Constr #

dataTypeOf :: Literal -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Literal) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Literal) #

gmapT :: (forall b. Data b => b -> b) -> Literal -> Literal #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Literal -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Literal -> r #

gmapQ :: (forall d. Data d => d -> u) -> Literal -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Literal -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Literal -> m Literal #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Literal -> m Literal #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Literal -> m Literal #

Ord Literal Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Read Literal Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show Literal Source # 
Instance details

Defined in Jikka.Core.Language.Expr

data Expr Source #

Expr represents the exprs of our core language. This is similar to the Expr of GHC Core. See also commentarycompilercore-syn-type.

\[ \begin{array}{rl} e ::= & x \\ \vert & \mathrm{literal}\ldots \\ \vert & e_0(e_1, e_2, \dots, e_n) \\ \vert & \lambda ~ x_0\colon \tau_0, x_1\colon \tau_1, \dots, x_{n-1}\colon \tau_{n-1}. ~ e \\ \vert & \mathbf{let} ~ x\colon \tau = e_1 ~ \mathbf{in} ~ e_2 \\ \vert & \mathbf{assert} ~ e_1 ~ \mathbf{in} ~ e_2 \end{array} \]

Constructors

Var VarName 
Lit Literal 
App Expr Expr 
Lam VarName Type Expr 
Let VarName Type Expr Expr

This "let" is not recursive.

Assert Expr Expr 

Instances

Instances details
Eq Expr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

(==) :: Expr -> Expr -> Bool #

(/=) :: Expr -> Expr -> Bool #

Data Expr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Expr -> c Expr #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Expr #

toConstr :: Expr -> Constr #

dataTypeOf :: Expr -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Expr) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Expr) #

gmapT :: (forall b. Data b => b -> b) -> Expr -> Expr #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Expr -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Expr -> r #

gmapQ :: (forall d. Data d => d -> u) -> Expr -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Expr -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Expr -> m Expr #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Expr -> m Expr #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Expr -> m Expr #

Ord Expr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

compare :: Expr -> Expr -> Ordering #

(<) :: Expr -> Expr -> Bool #

(<=) :: Expr -> Expr -> Bool #

(>) :: Expr -> Expr -> Bool #

(>=) :: Expr -> Expr -> Bool #

max :: Expr -> Expr -> Expr #

min :: Expr -> Expr -> Expr #

Read Expr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show Expr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

showsPrec :: Int -> Expr -> ShowS #

show :: Expr -> String #

showList :: [Expr] -> ShowS #

pattern Fun2Ty :: Type -> Type -> Type -> Type Source #

pattern Fun3Ty :: Type -> Type -> Type -> Type -> Type Source #

pattern Fun1STy :: Type -> Type Source #

pattern Fun2STy :: Type -> Type Source #

pattern Fun3STy :: Type -> Type Source #

pattern FunLTy :: Type -> Type Source #

pattern UnitTy :: Type Source #

pattern LitInt' :: Integer -> Expr Source #

pattern Lit0 :: Expr Source #

pattern Lit1 :: Expr Source #

pattern Lit2 :: Expr Source #

pattern LitMinus1 :: Expr Source #

pattern LitBool' :: Bool -> Expr Source #

pattern LitTrue :: Expr Source #

pattern LitFalse :: Expr Source #

pattern Builtin :: Builtin -> Expr Source #

pattern Builtin1 :: Builtin -> Type -> Expr Source #

pattern Builtin2 :: Builtin -> Type -> Type -> Expr Source #

pattern App2 :: Expr -> Expr -> Expr -> Expr Source #

pattern App3 :: Expr -> Expr -> Expr -> Expr -> Expr Source #

pattern App4 :: Expr -> Expr -> Expr -> Expr -> Expr -> Expr Source #

pattern AppBuiltin1 :: Builtin -> Expr -> Expr Source #

pattern AppBuiltin11 :: Builtin -> Type -> Expr -> Expr Source #

pattern AppBuiltin2 :: Builtin -> Expr -> Expr -> Expr Source #

pattern AppBuiltin12 :: Builtin -> Type -> Expr -> Expr -> Expr Source #

pattern AppBuiltin22 :: Builtin -> Type -> Type -> Expr -> Expr -> Expr Source #

pattern AppBuiltin3 :: Builtin -> Expr -> Expr -> Expr -> Expr Source #

pattern AppBuiltin13 :: Builtin -> Type -> Expr -> Expr -> Expr -> Expr Source #

pattern AppBuiltin23 :: Builtin -> Type -> Type -> Expr -> Expr -> Expr -> Expr Source #

pattern AppBuiltin14 :: Builtin -> Type -> Type -> Expr -> Expr -> Expr -> Expr Source #

pattern Lam2 :: VarName -> Type -> VarName -> Type -> Expr -> Expr Source #

pattern Lam3 :: VarName -> Type -> VarName -> Type -> VarName -> Type -> Expr -> Expr Source #

data ToplevelExpr Source #

ToplevelExpr is the toplevel exprs. In our core, "let rec" is allowed only on the toplevel.

\[ \begin{array}{rl} \mathrm{tle} ::= & e \\ \vert & \mathbf{let}~ x: \tau = e ~\mathbf{in}~ \mathrm{tle} \\ \vert & \mathbf{let~rec}~ x(x: \tau, x: \tau, \dots, x: \tau): \tau = e ~\mathbf{in}~ \mathrm{tle} \\ \vert & \mathbf{assert}~ e ~\mathbf{in}~ \mathrm{tle} \end{array} \]

Instances

Instances details
Eq ToplevelExpr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Data ToplevelExpr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ToplevelExpr -> c ToplevelExpr #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ToplevelExpr #

toConstr :: ToplevelExpr -> Constr #

dataTypeOf :: ToplevelExpr -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ToplevelExpr) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ToplevelExpr) #

gmapT :: (forall b. Data b => b -> b) -> ToplevelExpr -> ToplevelExpr #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ToplevelExpr -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ToplevelExpr -> r #

gmapQ :: (forall d. Data d => d -> u) -> ToplevelExpr -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ToplevelExpr -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ToplevelExpr -> m ToplevelExpr #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ToplevelExpr -> m ToplevelExpr #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ToplevelExpr -> m ToplevelExpr #

Ord ToplevelExpr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Read ToplevelExpr Source # 
Instance details

Defined in Jikka.Core.Language.Expr

Show ToplevelExpr Source # 
Instance details

Defined in Jikka.Core.Language.Expr