module Morley.Michelson.Parser.Type
( type_
, field
) where
import Prelude hiding (note, some, try)
import Data.Default (Default)
import Fmt (pretty)
import Text.Megaparsec (choice, label)
import Text.Megaparsec.Char.Lexer qualified as L
import Morley.Michelson.Parser.Annotations
import Morley.Michelson.Parser.Lexer
import Morley.Michelson.Parser.Types (Parser)
import Morley.Michelson.Untyped
type_ :: Parser Ty
type_ :: Parser Ty
type_ = (FieldAnn, Ty) -> Ty
forall a b. (a, b) -> b
snd ((FieldAnn, Ty) -> Ty)
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> Parser Ty
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
typeInner (FieldAnn -> Parser FieldAnn
forall (f :: * -> *) a. Applicative f => a -> f a
pure FieldAnn
forall {k} (a :: k). Annotation a
noAnn)
field :: Parser (FieldAnn, Ty)
field :: ParsecT CustomParserException Text Identity (FieldAnn, Ty)
field = Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
typeInner Parser FieldAnn
forall tag. KnownAnnTag tag => Parser (Annotation tag)
note
typeInner
:: Parser FieldAnn -> Parser (FieldAnn, Ty)
typeInner :: Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
typeInner Parser FieldAnn
fp = String
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall e s (m :: * -> *) a.
MonadParsec e s m =>
String -> m a -> m a
label String
"type" (ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty))
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a b. (a -> b) -> a -> b
$ [ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall (f :: * -> *) (m :: * -> *) a.
(Foldable f, Alternative m) =>
f (m a) -> m a
choice ([ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty))
-> [ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a b. (a -> b) -> a -> b
$ (ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Parser a -> Parser a
parens ParsecT CustomParserException Text Identity (FieldAnn, Ty)
field ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> [ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
-> [ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
forall a. a -> [a] -> [a]
:) ([ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
-> [ParsecT CustomParserException Text Identity (FieldAnn, Ty)])
-> [ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
-> [ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
forall a b. (a -> b) -> a -> b
$ (\Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
x -> Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
x Parser FieldAnn
fp) ((Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty))
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty))
-> [Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
-> [ParsecT CustomParserException Text Identity (FieldAnn, Ty)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
[ Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_int, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_nat, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_string, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_bytes, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_mutez, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_bool
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_keyhash, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_timestamp, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_address
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_key, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_unit, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_never, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_signature, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_chain_id
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_bls12381fr, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_bls12381g1, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_bls12381g2
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_option, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_list, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_set
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_operation, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_contract, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_ticket, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_pair, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_or
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_lambda, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_map, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_big_map
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_chestKey, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_chest
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_saplingState, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_saplingTransaction, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Parser a -> Parser (a, Ty)
t_saplingTransactionDeprecated
, Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
forall a. Default a => Parser a -> Parser (a, Ty)
t_txRollupL2Address
]
mkType :: T -> (a, TypeAnn) -> (a, Ty)
mkType :: forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
t (a
a, TypeAnn
ta) = (a
a, T -> TypeAnn -> Ty
Ty T
t TypeAnn
ta)
t_int :: (Default a) => Parser a -> Parser (a, Ty)
t_int :: forall a. Default a => Parser a -> Parser (a, Ty)
t_int Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"int" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TInt) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_nat :: (Default a) => Parser a -> Parser (a, Ty)
t_nat :: forall a. Default a => Parser a -> Parser (a, Ty)
t_nat Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"nat" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TNat) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_string :: (Default a) => Parser a -> Parser (a, Ty)
t_string :: forall a. Default a => Parser a -> Parser (a, Ty)
t_string Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"string" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TString) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_bytes :: (Default a) => Parser a -> Parser (a, Ty)
t_bytes :: forall a. Default a => Parser a -> Parser (a, Ty)
t_bytes Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"bytes" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TBytes) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_mutez :: (Default a) => Parser a -> Parser (a, Ty)
t_mutez :: forall a. Default a => Parser a -> Parser (a, Ty)
t_mutez Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"mutez" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TMutez) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_bool :: (Default a) => Parser a -> Parser (a, Ty)
t_bool :: forall a. Default a => Parser a -> Parser (a, Ty)
t_bool Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"bool" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TBool) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_keyhash :: (Default a) => Parser a -> Parser (a, Ty)
t_keyhash :: forall a. Default a => Parser a -> Parser (a, Ty)
t_keyhash Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"key_hash" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TKeyHash) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_timestamp :: (Default a) => Parser a -> Parser (a, Ty)
t_timestamp :: forall a. Default a => Parser a -> Parser (a, Ty)
t_timestamp Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"timestamp" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TTimestamp) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_address :: (Default a) => Parser a -> Parser (a, Ty)
t_address :: forall a. Default a => Parser a -> Parser (a, Ty)
t_address Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"address" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TAddress) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_key :: (Default a) => Parser a -> Parser (a, Ty)
t_key :: forall a. Default a => Parser a -> Parser (a, Ty)
t_key Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"key" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TKey) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_signature :: (Default a) => Parser a -> Parser (a, Ty)
t_signature :: forall a. Default a => Parser a -> Parser (a, Ty)
t_signature Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"signature" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TSignature) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_bls12381fr :: (Default a) => Parser a -> Parser (a, Ty)
t_bls12381fr :: forall a. Default a => Parser a -> Parser (a, Ty)
t_bls12381fr Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"bls12_381_fr"
T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TBls12381Fr ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> Parser (a, Ty)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_bls12381g1 :: (Default a) => Parser a -> Parser (a, Ty)
t_bls12381g1 :: forall a. Default a => Parser a -> Parser (a, Ty)
t_bls12381g1 Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"bls12_381_g1"
T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TBls12381G1 ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> Parser (a, Ty)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_bls12381g2 :: (Default a) => Parser a -> Parser (a, Ty)
t_bls12381g2 :: forall a. Default a => Parser a -> Parser (a, Ty)
t_bls12381g2 Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"bls12_381_g2"
T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TBls12381G2 ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> Parser (a, Ty)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_chestKey :: (Default a) => Parser a -> Parser (a, Ty)
t_chestKey :: forall a. Default a => Parser a -> Parser (a, Ty)
t_chestKey Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"chest_key"
T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TChestKey ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> Parser (a, Ty)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_chest :: (Default a) => Parser a -> Parser (a, Ty)
t_chest :: forall a. Default a => Parser a -> Parser (a, Ty)
t_chest Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"chest" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TChest) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_chain_id :: (Default a) => Parser a -> Parser (a, Ty)
t_chain_id :: forall a. Default a => Parser a -> Parser (a, Ty)
t_chain_id Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"chain_id"
T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TChainId ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> Parser (a, Ty)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_operation :: (Default a) => Parser a -> Parser (a, Ty)
t_operation :: forall a. Default a => Parser a -> Parser (a, Ty)
t_operation Parser a
fp = Tokens Text
-> ((a, TypeAnn) -> (a, Ty)) -> Parser ((a, TypeAnn) -> (a, Ty))
forall a. Tokens Text -> a -> Parser a
word Tokens Text
"operation" (T -> (a, TypeAnn) -> (a, Ty)
forall a. T -> (a, TypeAnn) -> (a, Ty)
mkType T
TOperation) Parser ((a, TypeAnn) -> (a, Ty))
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
-> ParsecT CustomParserException Text Identity (a, Ty)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
-> ParsecT CustomParserException Text Identity (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
t_contract :: (Default a) => Parser a -> Parser (a, Ty)
t_contract :: forall a. Default a => Parser a -> Parser (a, Ty)
t_contract Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"contract"
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Ty
a <- Parser Ty
type_
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> T
TContract Ty
a) TypeAnn
t)
t_ticket :: (Default a) => Parser a -> Parser (a, Ty)
t_ticket :: forall a. Default a => Parser a -> Parser (a, Ty)
t_ticket Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"ticket"
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Ty
a <- Parser Ty
type_
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> T
TTicket Ty
a) TypeAnn
t)
t_unit :: (Default a) => Parser a -> Parser (a, Ty)
t_unit :: forall a. Default a => Parser a -> Parser (a, Ty)
t_unit Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"unit"
(a
f,TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
return (a
f, T -> TypeAnn -> Ty
Ty T
TUnit TypeAnn
t)
t_never :: (Default a) => Parser a -> Parser (a, Ty)
t_never :: forall a. Default a => Parser a -> Parser (a, Ty)
t_never Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"never" Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Tokens Text -> Parser ()
symbol1 Tokens Text
"⊥"
(a
f,TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
return (a
f, T -> TypeAnn -> Ty
Ty T
TNever TypeAnn
t)
t_pair :: (Default a) => Parser a -> Parser (a, Ty)
t_pair :: forall a. Default a => Parser a -> Parser (a, Ty)
t_pair Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"pair"
(a
fieldAnn, TypeAnn
typeAnn) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
[(FieldAnn, Ty)]
fields <- ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> ParsecT CustomParserException Text Identity [(FieldAnn, Ty)]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many ParsecT CustomParserException Text Identity (FieldAnn, Ty)
field
T
tPair <- [(FieldAnn, Ty)] -> Parser T
go [(FieldAnn, Ty)]
fields
pure $ (a
fieldAnn, T -> TypeAnn -> Ty
Ty T
tPair TypeAnn
typeAnn)
where
go :: [(FieldAnn, Ty)] -> Parser T
go :: [(FieldAnn, Ty)] -> Parser T
go = \case
[] -> String -> Parser T
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"The 'pair' type expects at least 2 type arguments, but 0 were given."
[(FieldAnn
_, Ty
t)] -> String -> Parser T
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser T) -> String -> Parser T
forall a b. (a -> b) -> a -> b
$ String
"The 'pair' type expects at least 2 type arguments, but only 1 was given: '" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Ty -> String
forall a b. (Buildable a, FromBuilder b) => a -> b
pretty Ty
t String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"'."
[(FieldAnn
fieldAnnL, Ty
typeL), (FieldAnn
fieldAnnR, Ty
typeR)] ->
T -> Parser T
forall (f :: * -> *) a. Applicative f => a -> f a
pure (T -> Parser T) -> T -> Parser T
forall a b. (a -> b) -> a -> b
$ FieldAnn -> FieldAnn -> VarAnn -> VarAnn -> Ty -> Ty -> T
TPair FieldAnn
fieldAnnL FieldAnn
fieldAnnR VarAnn
forall {k} (a :: k). Annotation a
noAnn VarAnn
forall {k} (a :: k). Annotation a
noAnn Ty
typeL Ty
typeR
(FieldAnn
fieldAnnL, Ty
typeL) : [(FieldAnn, Ty)]
fields -> do
T
rightCombedT <- [(FieldAnn, Ty)] -> Parser T
go [(FieldAnn, Ty)]
fields
pure $ FieldAnn -> FieldAnn -> VarAnn -> VarAnn -> Ty -> Ty -> T
TPair FieldAnn
fieldAnnL FieldAnn
forall {k} (a :: k). Annotation a
noAnn VarAnn
forall {k} (a :: k). Annotation a
noAnn VarAnn
forall {k} (a :: k). Annotation a
noAnn Ty
typeL (T -> TypeAnn -> Ty
Ty T
rightCombedT TypeAnn
forall {k} (a :: k). Annotation a
noAnn)
t_or :: (Default a) => Parser a -> Parser (a, Ty)
t_or :: forall a. Default a => Parser a -> Parser (a, Ty)
t_or Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"or"
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
(FieldAnn
l, Ty
a) <- ParsecT CustomParserException Text Identity (FieldAnn, Ty)
field
(FieldAnn
r, Ty
b) <- ParsecT CustomParserException Text Identity (FieldAnn, Ty)
field
return (a
f, T -> TypeAnn -> Ty
Ty (FieldAnn -> FieldAnn -> Ty -> Ty -> T
TOr FieldAnn
l FieldAnn
r Ty
a Ty
b) TypeAnn
t)
t_option :: (Default a) => Parser a -> Parser (a, Ty)
t_option :: forall a. Default a => Parser a -> Parser (a, Ty)
t_option Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"option"
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Ty
a <- (FieldAnn, Ty) -> Ty
forall a b. (a, b) -> b
snd ((FieldAnn, Ty) -> Ty)
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
-> Parser Ty
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser FieldAnn
-> ParsecT CustomParserException Text Identity (FieldAnn, Ty)
typeInner (FieldAnn -> Parser FieldAnn
forall (f :: * -> *) a. Applicative f => a -> f a
pure FieldAnn
forall {k} (a :: k). Annotation a
noAnn)
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> T
TOption Ty
a) TypeAnn
t)
t_saplingState :: (Default a) => Parser a -> Parser (a, Ty)
t_saplingState :: forall a. Default a => Parser a -> Parser (a, Ty)
t_saplingState Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"sapling_state"
(a
f,TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Natural
n <- Parser Natural -> Parser Natural
forall a. Parser a -> Parser a
lexeme Parser Natural
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal
return (a
f, T -> TypeAnn -> Ty
Ty (Natural -> T
TSaplingState Natural
n) TypeAnn
t)
t_saplingTransaction :: (Default a) => Parser a -> Parser (a, Ty)
t_saplingTransaction :: forall a. Default a => Parser a -> Parser (a, Ty)
t_saplingTransaction Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"sapling_transaction"
(a
f,TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Natural
n <- Parser Natural -> Parser Natural
forall a. Parser a -> Parser a
lexeme Parser Natural
forall e s (m :: * -> *) a.
(MonadParsec e s m, Token s ~ Char, Num a) =>
m a
L.decimal
return (a
f, T -> TypeAnn -> Ty
Ty (Natural -> T
TSaplingTransaction Natural
n) TypeAnn
t)
t_saplingTransactionDeprecated :: Parser a -> Parser (a, Ty)
t_saplingTransactionDeprecated :: forall a. Parser a -> Parser (a, Ty)
t_saplingTransactionDeprecated Parser a
_ = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"sapling_transaction_deprecated"
String -> Parser (a, Ty)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Use of deprecated type: sapling_transaction_deprecated"
t_lambda :: (Default a) => Parser a -> Parser (a, Ty)
t_lambda :: forall a. Default a => Parser a -> Parser (a, Ty)
t_lambda Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"lambda"
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Ty
a <- Parser Ty
type_
Ty
b <- Parser Ty
type_
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> Ty -> T
TLambda Ty
a Ty
b) TypeAnn
t)
t_list :: forall a. (Default a) => Parser a -> Parser (a, Ty)
t_list :: forall a. Default a => Parser a -> Parser (a, Ty)
t_list Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"list"
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Ty
a <- Parser Ty
type_
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> T
TList Ty
a) TypeAnn
t)
t_set :: forall a. (Default a) => Parser a -> Parser (a, Ty)
t_set :: forall a. Default a => Parser a -> Parser (a, Ty)
t_set Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"set"
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Ty
a <- Parser Ty
type_
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> T
TSet Ty
a) TypeAnn
t)
t_map_like
:: (Default a)
=> Parser a -> Parser (Ty, Ty, a, TypeAnn)
t_map_like :: forall a. Default a => Parser a -> Parser (Ty, Ty, a, TypeAnn)
t_map_like Parser a
fp = do
(a
f, TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
Ty
a <- Parser Ty
type_
Ty
b <- Parser Ty
type_
return (Ty
a, Ty
b, a
f, TypeAnn
t)
t_map :: (Default a) => Parser a -> Parser (a, Ty)
t_map :: forall a. Default a => Parser a -> Parser (a, Ty)
t_map Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"map"
(Ty
a, Ty
b, a
f, TypeAnn
t) <- Parser a -> Parser (Ty, Ty, a, TypeAnn)
forall a. Default a => Parser a -> Parser (Ty, Ty, a, TypeAnn)
t_map_like Parser a
fp
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> Ty -> T
TMap Ty
a Ty
b) TypeAnn
t)
t_big_map :: (Default a) => Parser a -> Parser (a, Ty)
t_big_map :: forall a. Default a => Parser a -> Parser (a, Ty)
t_big_map Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"big_map"
(Ty
a, Ty
b, a
f, TypeAnn
t) <- Parser a -> Parser (Ty, Ty, a, TypeAnn)
forall a. Default a => Parser a -> Parser (Ty, Ty, a, TypeAnn)
t_map_like Parser a
fp
return (a
f, T -> TypeAnn -> Ty
Ty (Ty -> Ty -> T
TBigMap Ty
a Ty
b) TypeAnn
t)
t_txRollupL2Address :: Default a => Parser a -> Parser (a, Ty)
t_txRollupL2Address :: forall a. Default a => Parser a -> Parser (a, Ty)
t_txRollupL2Address Parser a
fp = do
Tokens Text -> Parser ()
symbol1 Tokens Text
"tx_rollup_l2_address"
(a
f,TypeAnn
t) <- Parser a -> Parser (a, TypeAnn)
forall a. Default a => Parser a -> Parser (a, TypeAnn)
fieldType Parser a
fp
return (a
f, T -> TypeAnn -> Ty
Ty T
TTxRollupL2Address TypeAnn
t)