module Morley.Michelson.Parser.Instr
( primInstr
, ops'
, mapOp
, pairOp
, unpairOp
, pairNOp
, cmpOp
, dupOp
, carOp
, cdrOp
) where
import Prelude hiding (EQ, GT, LT, many, note, some, try)
import Text.Megaparsec (choice, label, lookAhead, notFollowedBy, satisfy, sepEndBy, try)
import qualified Text.Megaparsec.Char.Lexer as L
import Morley.Michelson.Let (LetValue(..))
import Morley.Michelson.Macro (ParsedInstr, ParsedOp(..))
import Morley.Michelson.Parser.Annotations
import Morley.Michelson.Parser.Common
import Morley.Michelson.Parser.Lexer
import Morley.Michelson.Parser.Type
import Morley.Michelson.Parser.Types (Parser, letValues)
import Morley.Michelson.Parser.Value
import Morley.Michelson.Untyped
primInstr :: Parser (Contract' ParsedOp) -> Parser ParsedOp -> Parser ParsedInstr
primInstr :: Parser (Contract' ParsedOp)
-> Parser ParsedOp -> Parser ParsedInstr
primInstr Parser (Contract' ParsedOp)
contractParser Parser ParsedOp
opParser = String -> Parser ParsedInstr -> Parser ParsedInstr
forall e s (m :: * -> *) a.
MonadParsec e s m =>
String -> m a -> m a
label String
"primitive instruction" (Parser ParsedInstr -> Parser ParsedInstr)
-> Parser ParsedInstr -> Parser ParsedInstr
forall a b. (a -> b) -> a -> b
$ [Parser ParsedInstr] -> Parser ParsedInstr
forall (f :: * -> *) (m :: * -> *) a.
(Foldable f, Alternative m) =>
f (m a) -> m a
choice
[ Parser ParsedInstr
dropOp, Parser ParsedInstr
swapOp, Parser ParsedInstr
digOp, Parser ParsedInstr
dugOp, Parser ParsedOp -> Parser ParsedInstr
pushOp Parser ParsedOp
opParser, Parser ParsedInstr
someOp, Parser ParsedInstr
noneOp, Parser ParsedInstr
unitOp
, Parser ParsedOp -> Parser ParsedInstr
ifNoneOp Parser ParsedOp
opParser, Parser ParsedInstr
leftOp, Parser ParsedInstr
rightOp, Parser ParsedOp -> Parser ParsedInstr
ifLeftOp Parser ParsedOp
opParser, Parser ParsedInstr
nilOp
, Parser ParsedInstr
consOp, Parser ParsedOp -> Parser ParsedInstr
ifConsOp Parser ParsedOp
opParser, Parser ParsedInstr
sizeOp, Parser ParsedInstr
emptySetOp, Parser ParsedInstr
emptyMapOp, Parser ParsedInstr
emptyBigMapOp, Parser ParsedOp -> Parser ParsedInstr
iterOp Parser ParsedOp
opParser
, Parser ParsedInstr
memOp, Parser ParsedInstr
getAndUpdateOp, Parser ParsedInstr
getOp, Parser ParsedInstr
updateOp, Parser ParsedOp -> Parser ParsedInstr
loopLOp Parser ParsedOp
opParser, Parser ParsedOp -> Parser ParsedInstr
loopOp Parser ParsedOp
opParser
, Parser ParsedOp -> Parser ParsedInstr
lambdaOp Parser ParsedOp
opParser, Parser ParsedInstr
execOp, Parser ParsedInstr
applyOp, Parser ParsedOp -> Parser ParsedInstr
dipOp Parser ParsedOp
opParser, Parser ParsedInstr
failWithOp, Parser ParsedInstr
castOp, Parser ParsedInstr
renameOp, Parser ParsedInstr
levelOp
, Parser ParsedInstr
concatOp, Parser ParsedInstr
packOp, Parser ParsedInstr
unpackOp, Parser ParsedInstr
sliceOp, Parser ParsedInstr
isNatOp, Parser ParsedInstr
addressOp, Parser ParsedInstr
selfAddressOp, Parser ParsedInstr
addOp, Parser ParsedInstr
subOp
, Parser ParsedInstr
mulOp, Parser ParsedInstr
edivOp, Parser ParsedInstr
absOp, Parser ParsedInstr
negOp, Parser ParsedInstr
lslOp, Parser ParsedInstr
lsrOp, Parser ParsedInstr
orOp, Parser ParsedInstr
andOp, Parser ParsedInstr
xorOp, Parser ParsedInstr
notOp
, Parser ParsedInstr
compareOp, Parser ParsedInstr
eqOp, Parser ParsedInstr
neqOp, Parser ParsedInstr
ltOp, Parser ParsedInstr
leOp, Parser ParsedInstr
gtOp, Parser ParsedInstr
geOp, Parser ParsedInstr
intOp, Parser ParsedInstr
viewOp, Parser ParsedInstr
selfOp, Parser ParsedInstr
contractOp
, Parser ParsedInstr
transferTokensOp, Parser ParsedInstr
setDelegateOp
, Parser (Contract' ParsedOp) -> Parser ParsedInstr
createContractOp Parser (Contract' ParsedOp)
contractParser, Parser ParsedInstr
implicitAccountOp, Parser ParsedInstr
nowOp, Parser ParsedInstr
amountOp
, Parser ParsedInstr
balanceOp, Parser ParsedInstr
checkSigOp, Parser ParsedInstr
sha256Op, Parser ParsedInstr
sha512Op, Parser ParsedInstr
blake2BOp, Parser ParsedInstr
hashKeyOp, Parser ParsedInstr
pairingCheckOp
, Parser ParsedInstr
sourceOp, Parser ParsedInstr
senderOp, Parser ParsedInstr
chainIdOp, Parser ParsedInstr
sha3Op, Parser ParsedInstr
keccakOp, Parser ParsedInstr
neverOp
, Parser ParsedInstr
votingPowerOp, Parser ParsedInstr
totalVotingPowerOp, Parser ParsedInstr -> Parser ParsedInstr
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try Parser ParsedInstr
unpairNOp
, Parser ParsedInstr
unpairOp
, Parser ParsedInstr
ticketOp, Parser ParsedInstr
readTicketOp, Parser ParsedInstr
splitTicketOp, Parser ParsedInstr
joinTicketsOp
, Parser ParsedInstr
openChestOp
]
ops' :: Parser ParsedOp -> Parser [ParsedOp]
ops' :: Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser = (Parser [ParsedOp] -> Parser [ParsedOp]
forall a. Parser a -> Parser a
braces (Parser [ParsedOp] -> Parser [ParsedOp])
-> Parser [ParsedOp] -> Parser [ParsedOp]
forall a b. (a -> b) -> a -> b
$ Parser ParsedOp
-> ReaderT LetEnv (Parsec CustomParserException Text) (Maybe ())
-> Parser [ParsedOp]
forall (m :: * -> *) a sep. MonadPlus m => m a -> m sep -> m [a]
sepEndBy Parser ParsedOp
opParser (ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) (Maybe ())
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional ReaderT LetEnv (Parsec CustomParserException Text) ()
semicolon)) Parser [ParsedOp] -> Parser [ParsedOp] -> Parser [ParsedOp]
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (ParsedOp -> [ParsedOp]
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ParsedOp -> [ParsedOp]) -> Parser ParsedOp -> Parser [ParsedOp]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser ParsedOp
opParser)
failWithOp :: Parser ParsedInstr
failWithOp :: Parser ParsedInstr
failWithOp = Tokens Text -> ParsedInstr -> Parser ParsedInstr
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"FAILWITH" ParsedInstr
forall op. InstrAbstract op
FAILWITH
loopOp :: Parser ParsedOp -> Parser ParsedInstr
loopOp :: Parser ParsedOp -> Parser ParsedInstr
loopOp Parser ParsedOp
opParser = Tokens Text
-> ([ParsedOp] -> ParsedInstr)
-> Parser ([ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LOOP" [ParsedOp] -> ParsedInstr
forall op. [op] -> InstrAbstract op
LOOP Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
loopLOp :: Parser ParsedOp -> Parser ParsedInstr
loopLOp :: Parser ParsedOp -> Parser ParsedInstr
loopLOp Parser ParsedOp
opParser = Tokens Text
-> ([ParsedOp] -> ParsedInstr)
-> Parser ([ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LOOP_LEFT" [ParsedOp] -> ParsedInstr
forall op. [op] -> InstrAbstract op
LOOP_LEFT Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
execOp :: Parser ParsedInstr
execOp :: Parser ParsedInstr
execOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"EXEC" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
EXEC Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
applyOp :: Parser ParsedInstr
applyOp :: Parser ParsedInstr
applyOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"APPLY" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
APPLY Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
dipOp :: Parser ParsedOp -> Parser ParsedInstr
dipOp :: Parser ParsedOp -> Parser ParsedInstr
dipOp Parser ParsedOp
opParser = Text
-> (Word -> [ParsedOp] -> ParsedInstr)
-> ([ParsedOp] -> ParsedInstr)
-> Parser ([ParsedOp] -> ParsedInstr)
forall instr. Text -> (Word -> instr) -> instr -> Parser instr
parseWithOptionalParameter Text
"DIP" Word -> [ParsedOp] -> ParsedInstr
forall op. Word -> [op] -> InstrAbstract op
DIPN [ParsedOp] -> ParsedInstr
forall op. [op] -> InstrAbstract op
DIP Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
parseWithOptionalParameter :: Text -> (Word -> instr) -> instr -> Parser instr
parseWithOptionalParameter :: Text -> (Word -> instr) -> instr -> Parser instr
parseWithOptionalParameter Text
instrName Word -> instr
constructorWithParam instr
constructorNoParam =
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
instrName ReaderT LetEnv (Parsec CustomParserException Text) ()
-> Parser instr -> Parser instr
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
(Parser instr -> Parser instr
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (Word -> instr
constructorWithParam (Word -> instr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> Parser instr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal) Parser instr -> Parser instr -> Parser instr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> instr -> Parser instr
forall (f :: * -> *) a. Applicative f => a -> f a
pure instr
constructorNoParam)
dropOp :: Parser ParsedInstr
dropOp :: Parser ParsedInstr
dropOp = Text -> (Word -> ParsedInstr) -> ParsedInstr -> Parser ParsedInstr
forall instr. Text -> (Word -> instr) -> instr -> Parser instr
parseWithOptionalParameter Text
"DROP" Word -> ParsedInstr
forall op. Word -> InstrAbstract op
DROPN ParsedInstr
forall op. InstrAbstract op
DROP
dupOp :: Parser ParsedInstr
dupOp :: Parser ParsedInstr
dupOp = do
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"DUP"
VarAnn
varAnn <- ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) (Maybe Word)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal) ReaderT LetEnv (Parsec CustomParserException Text) (Maybe Word)
-> (Maybe Word -> ParsedInstr) -> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> ParsedInstr -> (Word -> ParsedInstr) -> Maybe Word -> ParsedInstr
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
DUP VarAnn
varAnn) (VarAnn -> Word -> ParsedInstr
forall op. VarAnn -> Word -> InstrAbstract op
DUPN VarAnn
varAnn)
swapOp :: Parser ParsedInstr
swapOp :: Parser ParsedInstr
swapOp = Tokens Text -> ParsedInstr -> Parser ParsedInstr
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SWAP" ParsedInstr
forall op. InstrAbstract op
SWAP
digOp :: Parser ParsedInstr
digOp :: Parser ParsedInstr
digOp = Tokens Text
-> (Word -> ParsedInstr) -> Parser (Word -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"DIG" Word -> ParsedInstr
forall op. Word -> InstrAbstract op
DIG Parser (Word -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal
dugOp :: Parser ParsedInstr
dugOp :: Parser ParsedInstr
dugOp = Tokens Text
-> (Word -> ParsedInstr) -> Parser (Word -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"DUG" Word -> ParsedInstr
forall op. Word -> InstrAbstract op
DUG Parser (Word -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal
pushOp :: Parser ParsedOp -> Parser ParsedInstr
pushOp :: Parser ParsedOp -> Parser ParsedInstr
pushOp Parser ParsedOp
opParser = do
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"PUSH"
VarAnn
v <- ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
(Parser ParsedInstr -> Parser ParsedInstr
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (Parser ParsedInstr -> Parser ParsedInstr)
-> Parser ParsedInstr -> Parser ParsedInstr
forall a b. (a -> b) -> a -> b
$ VarAnn -> Parser ParsedInstr
pushLet VarAnn
v) Parser ParsedInstr -> Parser ParsedInstr -> Parser ParsedInstr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (VarAnn -> Parser ParsedInstr
push' VarAnn
v)
where
pushLet :: VarAnn -> Parser ParsedInstr
pushLet VarAnn
v = do
Map Text LetValue
lvs <- (LetEnv -> Map Text LetValue)
-> ReaderT
LetEnv (Parsec CustomParserException Text) (Map Text LetValue)
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks LetEnv -> Map Text LetValue
letValues
LetValue
lv <- Map Text LetValue -> Parser LetValue
mkLetVal Map Text LetValue
lvs
return $ VarAnn -> Ty -> Value' ParsedOp -> ParsedInstr
forall op. VarAnn -> Ty -> Value' op -> InstrAbstract op
PUSH VarAnn
v (LetValue -> Ty
lvSig LetValue
lv) (LetValue -> Value' ParsedOp
lvVal LetValue
lv)
push' :: VarAnn -> Parser ParsedInstr
push' VarAnn
v = VarAnn -> Ty -> Value' ParsedOp -> ParsedInstr
forall op. VarAnn -> Ty -> Value' op -> InstrAbstract op
PUSH VarAnn
v (Ty -> Value' ParsedOp -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(Value' ParsedOp -> ParsedInstr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_ ReaderT
LetEnv
(Parsec CustomParserException Text)
(Value' ParsedOp -> ParsedInstr)
-> ReaderT
LetEnv (Parsec CustomParserException Text) (Value' ParsedOp)
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp
-> ReaderT
LetEnv (Parsec CustomParserException Text) (Value' ParsedOp)
value' Parser ParsedOp
opParser
unitOp :: Parser ParsedInstr
unitOp :: Parser ParsedInstr
unitOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"UNIT"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV; return $ TypeAnn -> VarAnn -> ParsedInstr
forall op. TypeAnn -> VarAnn -> InstrAbstract op
UNIT TypeAnn
t VarAnn
v
lambdaOp :: Parser ParsedOp -> Parser ParsedInstr
lambdaOp :: Parser ParsedOp -> Parser ParsedInstr
lambdaOp Parser ParsedOp
opParser =
Tokens Text
-> (VarAnn -> Ty -> Ty -> [ParsedOp] -> ParsedInstr)
-> Parser (VarAnn -> Ty -> Ty -> [ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LAMBDA" VarAnn -> Ty -> Ty -> [ParsedOp] -> ParsedInstr
forall op. VarAnn -> Ty -> Ty -> [op] -> InstrAbstract op
LAMBDA Parser (VarAnn -> Ty -> Ty -> [ParsedOp] -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(Ty -> Ty -> [ParsedOp] -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv
(Parsec CustomParserException Text)
(Ty -> Ty -> [ParsedOp] -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(Ty -> [ParsedOp] -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_ ReaderT
LetEnv
(Parsec CustomParserException Text)
(Ty -> [ParsedOp] -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ([ParsedOp] -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_ Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
neverOp :: Parser ParsedInstr
neverOp :: Parser ParsedInstr
neverOp = Tokens Text -> ParsedInstr -> Parser ParsedInstr
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"NEVER" ParsedInstr
forall op. InstrAbstract op
NEVER
cmpOp :: Parser ParsedInstr
cmpOp :: Parser ParsedInstr
cmpOp = Parser ParsedInstr
eqOp Parser ParsedInstr -> Parser ParsedInstr -> Parser ParsedInstr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser ParsedInstr
neqOp Parser ParsedInstr -> Parser ParsedInstr -> Parser ParsedInstr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser ParsedInstr
ltOp Parser ParsedInstr -> Parser ParsedInstr -> Parser ParsedInstr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser ParsedInstr
gtOp Parser ParsedInstr -> Parser ParsedInstr -> Parser ParsedInstr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser ParsedInstr
leOp Parser ParsedInstr -> Parser ParsedInstr -> Parser ParsedInstr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser ParsedInstr
gtOp Parser ParsedInstr -> Parser ParsedInstr -> Parser ParsedInstr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser ParsedInstr
geOp
eqOp :: Parser ParsedInstr
eqOp :: Parser ParsedInstr
eqOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"EQ" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
EQ Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
neqOp :: Parser ParsedInstr
neqOp :: Parser ParsedInstr
neqOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"NEQ" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
NEQ Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
ltOp :: Parser ParsedInstr
ltOp :: Parser ParsedInstr
ltOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
LT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
gtOp :: Parser ParsedInstr
gtOp :: Parser ParsedInstr
gtOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"GT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
GT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
leOp :: Parser ParsedInstr
leOp :: Parser ParsedInstr
leOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
LE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
geOp :: Parser ParsedInstr
geOp :: Parser ParsedInstr
geOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"GE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
GE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
compareOp :: Parser ParsedInstr
compareOp :: Parser ParsedInstr
compareOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"COMPARE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
COMPARE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
orOp :: Parser ParsedInstr
orOp :: Parser ParsedInstr
orOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"OR" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
OR Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
andOp :: Parser ParsedInstr
andOp :: Parser ParsedInstr
andOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"AND" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
AND Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
xorOp :: Parser ParsedInstr
xorOp :: Parser ParsedInstr
xorOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"XOR" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
XOR Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
notOp :: Parser ParsedInstr
notOp :: Parser ParsedInstr
notOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"NOT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
NOT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
addOp :: Parser ParsedInstr
addOp :: Parser ParsedInstr
addOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"ADD" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
ADD Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
subOp :: Parser ParsedInstr
subOp :: Parser ParsedInstr
subOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SUB" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SUB Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
mulOp :: Parser ParsedInstr
mulOp :: Parser ParsedInstr
mulOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"MUL" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
MUL Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
edivOp :: Parser ParsedInstr
edivOp :: Parser ParsedInstr
edivOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"EDIV" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
EDIV Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
absOp :: Parser ParsedInstr
absOp :: Parser ParsedInstr
absOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"ABS" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
ABS Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
negOp :: Parser ParsedInstr
negOp :: Parser ParsedInstr
negOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"NEG" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
NEG Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
lslOp :: Parser ParsedInstr
lslOp :: Parser ParsedInstr
lslOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LSL" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
LSL Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
lsrOp :: Parser ParsedInstr
lsrOp :: Parser ParsedInstr
lsrOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LSR" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
LSR Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
concatOp :: Parser ParsedInstr
concatOp :: Parser ParsedInstr
concatOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"CONCAT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
CONCAT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
sliceOp :: Parser ParsedInstr
sliceOp :: Parser ParsedInstr
sliceOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SLICE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SLICE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
pairOp :: Parser ParsedInstr
pairOp :: Parser ParsedInstr
pairOp = do
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"PAIR"
(TypeAnn
t, VarAnn
v, (FieldAnn
p, FieldAnn
q)) <- Parser (TypeAnn, VarAnn, (FieldAnn, FieldAnn))
notesTVF2Def
ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m ()
notFollowedBy (ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal :: Parser Word)
return $ TypeAnn -> VarAnn -> FieldAnn -> FieldAnn -> ParsedInstr
forall op.
TypeAnn -> VarAnn -> FieldAnn -> FieldAnn -> InstrAbstract op
PAIR TypeAnn
t VarAnn
v FieldAnn
p FieldAnn
q
unpairOp :: Parser ParsedInstr
unpairOp :: Parser ParsedInstr
unpairOp = do
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"UNPAIR"
((VarAnn
vn1, VarAnn
vn2), (FieldAnn
fn1, FieldAnn
fn2)) <- Parser ((VarAnn, VarAnn), (FieldAnn, FieldAnn))
notesVVFF
ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m ()
notFollowedBy (ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal :: Parser Word)
return $ VarAnn -> VarAnn -> FieldAnn -> FieldAnn -> ParsedInstr
forall op.
VarAnn -> VarAnn -> FieldAnn -> FieldAnn -> InstrAbstract op
UNPAIR VarAnn
vn1 VarAnn
vn2 FieldAnn
fn1 FieldAnn
fn2
pairNOp :: Parser ParsedInstr
pairNOp :: Parser ParsedInstr
pairNOp = do
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"PAIR"
VarAnn -> Word -> ParsedInstr
forall op. VarAnn -> Word -> InstrAbstract op
PAIRN
(VarAnn -> Word -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser (Word -> ParsedInstr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
Parser (Word -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal
unpairNOp :: Parser ParsedInstr
unpairNOp :: Parser ParsedInstr
unpairNOp =
Tokens Text
-> (Word -> ParsedInstr) -> Parser (Word -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"UNPAIR" Word -> ParsedInstr
forall op. Word -> InstrAbstract op
UNPAIRN Parser (Word -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal
carOp :: Parser ParsedInstr
carOp :: Parser ParsedInstr
carOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"CAR"; (VarAnn
v, FieldAnn
f) <- Parser (VarAnn, FieldAnn)
notesVF; return $ VarAnn -> FieldAnn -> ParsedInstr
forall op. VarAnn -> FieldAnn -> InstrAbstract op
CAR VarAnn
v FieldAnn
f
cdrOp :: Parser ParsedInstr
cdrOp :: Parser ParsedInstr
cdrOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"CDR"; (VarAnn
v, FieldAnn
f) <- Parser (VarAnn, FieldAnn)
notesVF; return $ VarAnn -> FieldAnn -> ParsedInstr
forall op. VarAnn -> FieldAnn -> InstrAbstract op
CDR VarAnn
v FieldAnn
f
emptySetOp :: Parser ParsedInstr
emptySetOp :: Parser ParsedInstr
emptySetOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"EMPTY_SET"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV;
TypeAnn -> VarAnn -> Ty -> ParsedInstr
forall op. TypeAnn -> VarAnn -> Ty -> InstrAbstract op
EMPTY_SET TypeAnn
t VarAnn
v (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
emptyMapOp :: Parser ParsedInstr
emptyMapOp :: Parser ParsedInstr
emptyMapOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"EMPTY_MAP"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV; Ty
a <- ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_;
TypeAnn -> VarAnn -> Ty -> Ty -> ParsedInstr
forall op. TypeAnn -> VarAnn -> Ty -> Ty -> InstrAbstract op
EMPTY_MAP TypeAnn
t VarAnn
v Ty
a (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
emptyBigMapOp :: Parser ParsedInstr
emptyBigMapOp :: Parser ParsedInstr
emptyBigMapOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"EMPTY_BIG_MAP"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV; Ty
a <- ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_;
TypeAnn -> VarAnn -> Ty -> Ty -> ParsedInstr
forall op. TypeAnn -> VarAnn -> Ty -> Ty -> InstrAbstract op
EMPTY_BIG_MAP TypeAnn
t VarAnn
v Ty
a (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
memOp :: Parser ParsedInstr
memOp :: Parser ParsedInstr
memOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"MEM" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
MEM Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
updateOp :: Parser ParsedInstr
updateOp :: Parser ParsedInstr
updateOp = do
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"UPDATE"
VarAnn
varAnn <- ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
Maybe Word
ix <- ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) (Maybe Word)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal)
pure $ ParsedInstr -> (Word -> ParsedInstr) -> Maybe Word -> ParsedInstr
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
UPDATE VarAnn
varAnn) (VarAnn -> Word -> ParsedInstr
forall op. VarAnn -> Word -> InstrAbstract op
UPDATEN VarAnn
varAnn) Maybe Word
ix
getAndUpdateOp :: Parser ParsedInstr
getAndUpdateOp :: Parser ParsedInstr
getAndUpdateOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"GET_AND_UPDATE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
GET_AND_UPDATE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
iterOp :: Parser ParsedOp -> Parser ParsedInstr
iterOp :: Parser ParsedOp -> Parser ParsedInstr
iterOp Parser ParsedOp
opParser = Tokens Text
-> ([ParsedOp] -> ParsedInstr)
-> Parser ([ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"ITER" [ParsedOp] -> ParsedInstr
forall op. [op] -> InstrAbstract op
ITER Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
sizeOp :: Parser ParsedInstr
sizeOp :: Parser ParsedInstr
sizeOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SIZE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SIZE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
mapOp :: Parser ParsedOp -> Parser ParsedInstr
mapOp :: Parser ParsedOp -> Parser ParsedInstr
mapOp Parser ParsedOp
opParser = Tokens Text
-> (VarAnn -> [ParsedOp] -> ParsedInstr)
-> Parser (VarAnn -> [ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"MAP" VarAnn -> [ParsedOp] -> ParsedInstr
forall op. VarAnn -> [op] -> InstrAbstract op
MAP Parser (VarAnn -> [ParsedOp] -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ([ParsedOp] -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
getOp :: Parser ParsedInstr
getOp :: Parser ParsedInstr
getOp = do
Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"GET"
VarAnn
varAnn <- ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
Maybe Word
ix <- ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) (Maybe Word)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (ReaderT LetEnv (Parsec CustomParserException Text) Word
-> ReaderT LetEnv (Parsec CustomParserException Text) Word
forall a. Parser a -> Parser a
lexeme ReaderT LetEnv (Parsec CustomParserException Text) Word
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal)
pure $ ParsedInstr -> (Word -> ParsedInstr) -> Maybe Word -> ParsedInstr
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
GET VarAnn
varAnn) (VarAnn -> Word -> ParsedInstr
forall op. VarAnn -> Word -> InstrAbstract op
GETN VarAnn
varAnn) Maybe Word
ix
nilOp :: Parser ParsedInstr
nilOp :: Parser ParsedInstr
nilOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"NIL"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV; TypeAnn -> VarAnn -> Ty -> ParsedInstr
forall op. TypeAnn -> VarAnn -> Ty -> InstrAbstract op
NIL TypeAnn
t VarAnn
v (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
consOp :: Parser ParsedInstr
consOp :: Parser ParsedInstr
consOp = do
ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) ())
-> (ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) ())
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall a. Parser a -> Parser a
lexeme (ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) ())
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall a b. (a -> b) -> a -> b
$ do
ReaderT LetEnv (Parsec CustomParserException Text) Text
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (ReaderT LetEnv (Parsec CustomParserException Text) Text
-> ReaderT LetEnv (Parsec CustomParserException Text) ())
-> ReaderT LetEnv (Parsec CustomParserException Text) Text
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall a b. (a -> b) -> a -> b
$ Text -> ReaderT LetEnv (Parsec CustomParserException Text) Text
forall e s (f :: * -> *).
(MonadParsec e s f, Tokens s ~ Text) =>
Text -> f Text
string' Text
"CONS"
ReaderT LetEnv (Parsec CustomParserException Text) Text
-> ReaderT LetEnv (Parsec CustomParserException Text) ()
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m ()
notFollowedBy (Text -> ReaderT LetEnv (Parsec CustomParserException Text) Text
forall e s (f :: * -> *).
(MonadParsec e s f, Tokens s ~ Text) =>
Text -> f Text
string' Text
"T")
VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
CONS (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
ifConsOp :: Parser ParsedOp -> Parser ParsedInstr
ifConsOp :: Parser ParsedOp -> Parser ParsedInstr
ifConsOp Parser ParsedOp
opParser = Tokens Text
-> ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
-> Parser ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"IF_CONS" [ParsedOp] -> [ParsedOp] -> ParsedInstr
forall op. [op] -> [op] -> InstrAbstract op
IF_CONS Parser ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ([ParsedOp] -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
someOp :: Parser ParsedInstr
someOp :: Parser ParsedInstr
someOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"SOME"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV; return $ TypeAnn -> VarAnn -> ParsedInstr
forall op. TypeAnn -> VarAnn -> InstrAbstract op
SOME TypeAnn
t VarAnn
v
noneOp :: Parser ParsedInstr
noneOp :: Parser ParsedInstr
noneOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"NONE"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV; TypeAnn -> VarAnn -> Ty -> ParsedInstr
forall op. TypeAnn -> VarAnn -> Ty -> InstrAbstract op
NONE TypeAnn
t VarAnn
v (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
ifNoneOp :: Parser ParsedOp -> Parser ParsedInstr
ifNoneOp :: Parser ParsedOp -> Parser ParsedInstr
ifNoneOp Parser ParsedOp
opParser = Tokens Text
-> ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
-> Parser ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"IF_NONE" [ParsedOp] -> [ParsedOp] -> ParsedInstr
forall op. [op] -> [op] -> InstrAbstract op
IF_NONE Parser ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ([ParsedOp] -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
leftOp :: Parser ParsedInstr
leftOp :: Parser ParsedInstr
leftOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"LEFT"; (TypeAnn
t, VarAnn
v, (FieldAnn
f, FieldAnn
f')) <- Parser (TypeAnn, VarAnn, (FieldAnn, FieldAnn))
notesTVF2Def;
TypeAnn -> VarAnn -> FieldAnn -> FieldAnn -> Ty -> ParsedInstr
forall op.
TypeAnn -> VarAnn -> FieldAnn -> FieldAnn -> Ty -> InstrAbstract op
LEFT TypeAnn
t VarAnn
v FieldAnn
f FieldAnn
f' (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
rightOp :: Parser ParsedInstr
rightOp :: Parser ParsedInstr
rightOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"RIGHT"; (TypeAnn
t, VarAnn
v, (FieldAnn
f, FieldAnn
f')) <- Parser (TypeAnn, VarAnn, (FieldAnn, FieldAnn))
notesTVF2Def;
TypeAnn -> VarAnn -> FieldAnn -> FieldAnn -> Ty -> ParsedInstr
forall op.
TypeAnn -> VarAnn -> FieldAnn -> FieldAnn -> Ty -> InstrAbstract op
RIGHT TypeAnn
t VarAnn
v FieldAnn
f FieldAnn
f' (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
ifLeftOp :: Parser ParsedOp -> Parser ParsedInstr
ifLeftOp :: Parser ParsedOp -> Parser ParsedInstr
ifLeftOp Parser ParsedOp
opParser = Tokens Text
-> ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
-> Parser ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"IF_LEFT" [ParsedOp] -> [ParsedOp] -> ParsedInstr
forall op. [op] -> [op] -> InstrAbstract op
IF_LEFT Parser ([ParsedOp] -> [ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ([ParsedOp] -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser Parser ([ParsedOp] -> ParsedInstr)
-> Parser [ParsedOp] -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ParsedOp -> Parser [ParsedOp]
ops' Parser ParsedOp
opParser
createContractOp :: Parser (Contract' ParsedOp) -> Parser ParsedInstr
createContractOp :: Parser (Contract' ParsedOp) -> Parser ParsedInstr
createContractOp Parser (Contract' ParsedOp)
contractParser =
Tokens Text
-> (VarAnn -> VarAnn -> Contract' ParsedOp -> ParsedInstr)
-> Parser (VarAnn -> VarAnn -> Contract' ParsedOp -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"CREATE_CONTRACT" VarAnn -> VarAnn -> Contract' ParsedOp -> ParsedInstr
forall op. VarAnn -> VarAnn -> Contract' op -> InstrAbstract op
CREATE_CONTRACT
Parser (VarAnn -> VarAnn -> Contract' ParsedOp -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> Contract' ParsedOp -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> Contract' ParsedOp -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(Contract' ParsedOp -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv
(Parsec CustomParserException Text)
(Contract' ParsedOp -> ParsedInstr)
-> Parser (Contract' ParsedOp) -> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Contract' ParsedOp) -> Parser (Contract' ParsedOp)
forall a. Parser a -> Parser a
braces Parser (Contract' ParsedOp)
contractParser
transferTokensOp :: Parser ParsedInstr
transferTokensOp :: Parser ParsedInstr
transferTokensOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"TRANSFER_TOKENS" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
TRANSFER_TOKENS Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
setDelegateOp :: Parser ParsedInstr
setDelegateOp :: Parser ParsedInstr
setDelegateOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SET_DELEGATE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SET_DELEGATE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
balanceOp :: Parser ParsedInstr
balanceOp :: Parser ParsedInstr
balanceOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"BALANCE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
BALANCE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
contractOp :: Parser ParsedInstr
contractOp :: Parser ParsedInstr
contractOp = Tokens Text
-> (VarAnn -> FieldAnn -> Ty -> ParsedInstr)
-> Parser (VarAnn -> FieldAnn -> Ty -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"CONTRACT" VarAnn -> FieldAnn -> Ty -> ParsedInstr
forall op. VarAnn -> FieldAnn -> Ty -> InstrAbstract op
CONTRACT Parser (VarAnn -> FieldAnn -> Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(FieldAnn -> Ty -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv
(Parsec CustomParserException Text)
(FieldAnn -> Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) FieldAnn
-> ReaderT
LetEnv (Parsec CustomParserException Text) (Ty -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) FieldAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv (Parsec CustomParserException Text) (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
sourceOp :: Parser ParsedInstr
sourceOp :: Parser ParsedInstr
sourceOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SOURCE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SOURCE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
senderOp :: Parser ParsedInstr
senderOp :: Parser ParsedInstr
senderOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SENDER" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SENDER Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
amountOp :: Parser ParsedInstr
amountOp :: Parser ParsedInstr
amountOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"AMOUNT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
AMOUNT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
votingPowerOp :: Parser ParsedInstr
votingPowerOp :: Parser ParsedInstr
votingPowerOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"VOTING_POWER" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
VOTING_POWER Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
totalVotingPowerOp :: Parser ParsedInstr
totalVotingPowerOp :: Parser ParsedInstr
totalVotingPowerOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"TOTAL_VOTING_POWER" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
TOTAL_VOTING_POWER Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
implicitAccountOp :: Parser ParsedInstr
implicitAccountOp :: Parser ParsedInstr
implicitAccountOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"IMPLICIT_ACCOUNT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
IMPLICIT_ACCOUNT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
viewOp :: Parser ParsedInstr
viewOp :: Parser ParsedInstr
viewOp =
ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> ViewName -> Ty -> ParsedInstr)
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> ViewName -> Ty -> ParsedInstr)
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (Tokens Text
-> (VarAnn -> ViewName -> Ty -> ParsedInstr)
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> ViewName -> Ty -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"VIEW" VarAnn -> ViewName -> Ty -> ParsedInstr
forall op. VarAnn -> ViewName -> Ty -> InstrAbstract op
VIEW ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> ViewName -> Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Char
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> ViewName -> Ty -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ReaderT LetEnv (Parsec CustomParserException Text) Char
-> ReaderT LetEnv (Parsec CustomParserException Text) Char
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
lookAhead ((Token Text -> Bool)
-> ReaderT LetEnv (Parsec CustomParserException Text) (Token Text)
forall e s (m :: * -> *).
MonadParsec e s m =>
(Token s -> Bool) -> m (Token s)
satisfy (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
'_'))) ReaderT
LetEnv
(Parsec CustomParserException Text)
(VarAnn -> ViewName -> Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(ViewName -> Ty -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv
(Parsec CustomParserException Text)
(ViewName -> Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) ViewName
-> ReaderT
LetEnv (Parsec CustomParserException Text) (Ty -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) ViewName
viewName_ ReaderT
LetEnv (Parsec CustomParserException Text) (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
selfOp :: Parser ParsedInstr
selfOp :: Parser ParsedInstr
selfOp = Tokens Text
-> (VarAnn -> FieldAnn -> ParsedInstr)
-> Parser (VarAnn -> FieldAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SELF" VarAnn -> FieldAnn -> ParsedInstr
forall op. VarAnn -> FieldAnn -> InstrAbstract op
SELF Parser (VarAnn -> FieldAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> ReaderT
LetEnv
(Parsec CustomParserException Text)
(FieldAnn -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv
(Parsec CustomParserException Text)
(FieldAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) FieldAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) FieldAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
addressOp :: Parser ParsedInstr
addressOp :: Parser ParsedInstr
addressOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"ADDRESS" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
ADDRESS Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
selfAddressOp :: Parser ParsedInstr
selfAddressOp :: Parser ParsedInstr
selfAddressOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SELF_ADDRESS" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SELF_ADDRESS Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
nowOp :: Parser ParsedInstr
nowOp :: Parser ParsedInstr
nowOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"NOW" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
NOW Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
levelOp :: Parser ParsedInstr
levelOp :: Parser ParsedInstr
levelOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"LEVEL" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
LEVEL Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
chainIdOp :: Parser ParsedInstr
chainIdOp :: Parser ParsedInstr
chainIdOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"CHAIN_ID" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
CHAIN_ID Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
packOp :: Parser ParsedInstr
packOp :: Parser ParsedInstr
packOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"PACK" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
PACK Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
unpackOp :: Parser ParsedInstr
unpackOp :: Parser ParsedInstr
unpackOp = do Text -> ReaderT LetEnv (Parsec CustomParserException Text) ()
symbol' Text
"UNPACK"; (TypeAnn
t, VarAnn
v) <- Parser (TypeAnn, VarAnn)
notesTV; TypeAnn -> VarAnn -> Ty -> ParsedInstr
forall op. TypeAnn -> VarAnn -> Ty -> InstrAbstract op
UNPACK TypeAnn
t VarAnn
v (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
checkSigOp :: Parser ParsedInstr
checkSigOp :: Parser ParsedInstr
checkSigOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"CHECK_SIGNATURE" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
CHECK_SIGNATURE Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
blake2BOp :: Parser ParsedInstr
blake2BOp :: Parser ParsedInstr
blake2BOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"BLAKE2B" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
BLAKE2B Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
sha256Op :: Parser ParsedInstr
sha256Op :: Parser ParsedInstr
sha256Op = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SHA256" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SHA256 Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
sha512Op :: Parser ParsedInstr
sha512Op :: Parser ParsedInstr
sha512Op = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SHA512" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SHA512 Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
sha3Op :: Parser ParsedInstr
sha3Op :: Parser ParsedInstr
sha3Op = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SHA3" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SHA3 Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
keccakOp :: Parser ParsedInstr
keccakOp :: Parser ParsedInstr
keccakOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"KECCAK" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
KECCAK Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
hashKeyOp :: Parser ParsedInstr
hashKeyOp :: Parser ParsedInstr
hashKeyOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"HASH_KEY" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
HASH_KEY Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
pairingCheckOp :: Parser ParsedInstr
pairingCheckOp :: Parser ParsedInstr
pairingCheckOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"PAIRING_CHECK" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
PAIRING_CHECK Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
castOp :: Parser ParsedInstr
castOp :: Parser ParsedInstr
castOp = Tokens Text
-> (VarAnn -> Ty -> ParsedInstr)
-> Parser (VarAnn -> Ty -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"CAST" VarAnn -> Ty -> ParsedInstr
forall op. VarAnn -> Ty -> InstrAbstract op
CAST Parser (VarAnn -> Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> ReaderT
LetEnv (Parsec CustomParserException Text) (Ty -> ParsedInstr)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef ReaderT
LetEnv (Parsec CustomParserException Text) (Ty -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) Ty
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) Ty
type_
renameOp :: Parser ParsedInstr
renameOp :: Parser ParsedInstr
renameOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"RENAME" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
RENAME Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
isNatOp :: Parser ParsedInstr
isNatOp :: Parser ParsedInstr
isNatOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"ISNAT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
ISNAT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
intOp :: Parser ParsedInstr
intOp :: Parser ParsedInstr
intOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"INT" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
INT Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
ticketOp :: Parser ParsedInstr
ticketOp :: Parser ParsedInstr
ticketOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"TICKET" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
TICKET Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
readTicketOp :: Parser ParsedInstr
readTicketOp :: Parser ParsedInstr
readTicketOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"READ_TICKET" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
READ_TICKET Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
splitTicketOp :: Parser ParsedInstr
splitTicketOp :: Parser ParsedInstr
splitTicketOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"SPLIT_TICKET" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
SPLIT_TICKET Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
joinTicketsOp :: Parser ParsedInstr
joinTicketsOp :: Parser ParsedInstr
joinTicketsOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"JOIN_TICKETS" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
JOIN_TICKETS Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef
openChestOp :: Parser ParsedInstr
openChestOp :: Parser ParsedInstr
openChestOp = Tokens Text
-> (VarAnn -> ParsedInstr) -> Parser (VarAnn -> ParsedInstr)
forall a. Tokens Text -> a -> Parser a
word' Tokens Text
"OPEN_CHEST" VarAnn -> ParsedInstr
forall op. VarAnn -> InstrAbstract op
OPEN_CHEST Parser (VarAnn -> ParsedInstr)
-> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
-> Parser ParsedInstr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ReaderT LetEnv (Parsec CustomParserException Text) VarAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
noteDef