Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data HST (ts :: [T]) where
- (-:&) :: (Typeable xs, Typeable x, SingI x) => Sing x -> HST xs -> HST (x ': xs)
- data SomeHST where
- data SomeInstrOut inp where
- (:::) :: Typeable out => Instr inp out -> HST out -> SomeInstrOut inp
- AnyOutInstr :: (forall out. Instr inp out) -> SomeInstrOut inp
- data SomeInstr inp where
- (:/) :: HST inp -> SomeInstrOut inp -> SomeInstr inp
- data SomeValue where
- data SomeContract where
- SomeContract :: (Each [Typeable, SingI, HasNoOp] [st, cp], HasNoBigMap cp, BigMapConstraint st) => Contract cp st -> HST (ContractInp cp st) -> HST (ContractOut st) -> SomeContract
- data SomeCValue where
- data BoundVars = BoundVars (Map Var Type) (Maybe SomeHST)
- type TcExtFrames = [BoundVars]
- noBoundVars :: BoundVars
Documentation
data HST (ts :: [T]) where Source #
Data type holding type information for stack (Heterogeneous Stack Type).
This data type is used along with instruction data type Instr
to carry information about its input and output stack types.
That is, if there is value instr :: Instr inp out
, along with this
instr
one may carry inpHST :: HST inp
and outHST :: HST out
which will
contain whole information about input and output stack types for instr
.
Data type HST
is very similar to Data.Vinyl.Rec
,
but is specialized for a particular purpose.
In particular, definition of HST (t1 ': t2 ': ... tn ': '[])
requires
constraints (Typeable t1, Typeable t2, ..., Typeable tn)
as well as
constraints (Typeable '[ t1 ], Typeable '[ t1, t2 ], ...)
.
These applications of Typeable
class are required for convenient usage
of type encoded by HST ts
with some functions from Data.Typeable
.
Data type HST
(Heterogeneous Stack Type) is a heterogenuous list of triples.
First element of triple is a type singleton which is due to main motivation
behind HST
, namely for it to be used as representation of Instr
type
data for pattern-matching.
Second element of triple is a structure, holding field and type annotations
for a given type.
Third element of triple is an optional variable annotation for the stack
element.
(-:&) :: (Typeable xs, Typeable x, SingI x) => Sing x -> HST xs -> HST (x ': xs) infixr 7 Source #
Append a type to HST
, assuming that notes and annotations
for this type are unknown.
No-argument type wrapper for HST
data type.
data SomeInstrOut inp where Source #
This data type keeps part of type check result - instruction and corresponding output stack.
(:::) :: Typeable out => Instr inp out -> HST out -> SomeInstrOut inp infix 9 | Type-check result with concrete output stack, most common case. Output stack type is wrapped inside the type and |
AnyOutInstr :: (forall out. Instr inp out) -> SomeInstrOut inp | Type-check result which matches against arbitrary output stack. Information about annotations in the output stack is absent. This case is only possible when the corresponding code terminates
with |
Instances
Show (ExtInstr inp) => Show (SomeInstrOut inp) Source # | |
Defined in Michelson.TypeCheck.Types showsPrec :: Int -> SomeInstrOut inp -> ShowS # show :: SomeInstrOut inp -> String # showList :: [SomeInstrOut inp] -> ShowS # |
data SomeInstr inp where Source #
Data type keeping the whole type check result: instruction and type representations of instruction's input and output.
(:/) :: HST inp -> SomeInstrOut inp -> SomeInstr inp infix 8 |
Data type, holding strictly-typed Michelson value along with its type singleton.
data SomeContract where Source #
SomeContract :: (Each [Typeable, SingI, HasNoOp] [st, cp], HasNoBigMap cp, BigMapConstraint st) => Contract cp st -> HST (ContractInp cp st) -> HST (ContractOut st) -> SomeContract |
Instances
Show SomeContract Source # | |
Defined in Michelson.TypeCheck.Types showsPrec :: Int -> SomeContract -> ShowS # show :: SomeContract -> String # showList :: [SomeContract] -> ShowS # |
data SomeCValue where Source #
Data type, holding strictly-typed Michelson value along with its type singleton.
Set of variables defined in a let-block.
type TcExtFrames = [BoundVars] Source #
State for type checking nop