morley-1.20.0: Developer tools for the Michelson Language
Safe HaskellSafe-Inferred
LanguageHaskell2010

Morley.Michelson.Typed.Sing

Description

Module, providing singleton boilerplate for T data types.

Some functions from Data.Singletons are provided alternative version here.

Synopsis

Documentation

data SingT :: T -> Type where Source #

Constructors

STKey :: SingT ('TKey :: T) 
STUnit :: SingT ('TUnit :: T) 
STSignature :: SingT ('TSignature :: T) 
STChainId :: SingT ('TChainId :: T) 
STOption :: forall (n :: T). (Sing n) -> SingT ('TOption n :: T) 
STList :: forall (n :: T). (Sing n) -> SingT ('TList n :: T) 
STSet :: forall (n :: T). (Sing n) -> SingT ('TSet n :: T) 
STOperation :: SingT ('TOperation :: T) 
STContract :: forall (n :: T). (Sing n) -> SingT ('TContract n :: T) 
STTicket :: forall (n :: T). (Sing n) -> SingT ('TTicket n :: T) 
STPair :: forall (n :: T) (n :: T). (Sing n) -> (Sing n) -> SingT ('TPair n n :: T) 
STOr :: forall (n :: T) (n :: T). (Sing n) -> (Sing n) -> SingT ('TOr n n :: T) 
STLambda :: forall (n :: T) (n :: T). (Sing n) -> (Sing n) -> SingT ('TLambda n n :: T) 
STMap :: forall (n :: T) (n :: T). (Sing n) -> (Sing n) -> SingT ('TMap n n :: T) 
STBigMap :: forall (n :: T) (n :: T). (Sing n) -> (Sing n) -> SingT ('TBigMap n n :: T) 
STInt :: SingT ('TInt :: T) 
STNat :: SingT ('TNat :: T) 
STString :: SingT ('TString :: T) 
STBytes :: SingT ('TBytes :: T) 
STMutez :: SingT ('TMutez :: T) 
STBool :: SingT ('TBool :: T) 
STKeyHash :: SingT ('TKeyHash :: T) 
STBls12381Fr :: SingT ('TBls12381Fr :: T) 
STBls12381G1 :: SingT ('TBls12381G1 :: T) 
STBls12381G2 :: SingT ('TBls12381G2 :: T) 
STTimestamp :: SingT ('TTimestamp :: T) 
STAddress :: SingT ('TAddress :: T) 
STChest :: SingT ('TChest :: T) 
STChestKey :: SingT ('TChestKey :: T) 
STSaplingState :: forall (n :: Nat). (Sing n) -> SingT ('TSaplingState n :: T) 
STSaplingTransaction :: forall (n :: Nat). (Sing n) -> SingT ('TSaplingTransaction n :: T) 
STNever :: SingT ('TNever :: T) 

Instances

Instances details
(SDecide T, SDecide Peano) => TestCoercion SingT Source # 
Instance details

Defined in Morley.Michelson.Typed.Sing

Methods

testCoercion :: forall (a :: k) (b :: k). SingT a -> SingT b -> Maybe (Coercion a b) #

(SDecide T, SDecide Peano) => TestEquality SingT Source # 
Instance details

Defined in Morley.Michelson.Typed.Sing

Methods

testEquality :: forall (a :: k) (b :: k). SingT a -> SingT b -> Maybe (a :~: b) #

Show (SingT x) Source # 
Instance details

Defined in Morley.Michelson.Typed.Sing

Methods

showsPrec :: Int -> SingT x -> ShowS #

show :: SingT x -> String #

showList :: [SingT x] -> ShowS #

NFData (SingT a) Source # 
Instance details

Defined in Morley.Michelson.Typed.Sing

Methods

rnf :: SingT a -> () #

Eq (SingT x) Source # 
Instance details

Defined in Morley.Michelson.Typed.Sing

Methods

(==) :: SingT x -> SingT x -> Bool #

(/=) :: SingT x -> SingT x -> Bool #

Buildable (SingT t) Source # 
Instance details

Defined in Morley.Michelson.Typed.Sing

Methods

build :: SingT t -> Doc

buildList :: [SingT t] -> Doc

castSingE :: forall (a :: T) (b :: T) t. (SingI a, SingI b) => t a -> Either Text (t b) Source #

Previously, we were using SingI constraints in SingT constructors. That was not so optimal because we have been spending too much space at runtime. Instead of that, we process values of SingT using the function withSingI in those places where the SingI constraint is required. withSingI allows one to create the SingI context for a given Sing.

castM :: forall (a :: T) (b :: T) t m. (SingI a, SingI b, Monad m) => t a -> (forall x. MismatchError T -> m x) -> m (t b) Source #

Monadic version of castSing. Throws an error using the given function if the cast fails.

eqP :: forall (a :: T) (b :: T). (SingI a, SingI b) => Proxy a -> Proxy b -> Maybe (a :~: b) Source #

Version of eqI that uses Proxy

requireEq :: forall (a :: T) (b :: T) m. (SingI a, SingI b, Monad m) => (forall x. MismatchError T -> m x) -> m (a :~: b) Source #

Monadic version of eqI. Throws an error using the given function if the two types are not equal.

Orphan instances

SingKind T Source # 
Instance details

Associated Types

type Demote T = (r :: Type) #

Methods

fromSing :: forall (a :: T). Sing a -> Demote T #

toSing :: Demote T -> SomeSing T #

(SDecide T, SDecide Peano) => SDecide T Source # 
Instance details

Methods

(%~) :: forall (a :: T) (b :: T). Sing a -> Sing b -> Decision (a :~: b) #

SingI 'TAddress Source # 
Instance details

Methods

sing :: Sing 'TAddress #

SingI 'TBls12381Fr Source # 
Instance details

Methods

sing :: Sing 'TBls12381Fr #

SingI 'TBls12381G1 Source # 
Instance details

Methods

sing :: Sing 'TBls12381G1 #

SingI 'TBls12381G2 Source # 
Instance details

Methods

sing :: Sing 'TBls12381G2 #

SingI 'TBool Source # 
Instance details

Methods

sing :: Sing 'TBool #

SingI 'TBytes Source # 
Instance details

Methods

sing :: Sing 'TBytes #

SingI 'TChainId Source # 
Instance details

Methods

sing :: Sing 'TChainId #

SingI 'TChest Source # 
Instance details

Methods

sing :: Sing 'TChest #

SingI 'TChestKey Source # 
Instance details

Methods

sing :: Sing 'TChestKey #

SingI 'TInt Source # 
Instance details

Methods

sing :: Sing 'TInt #

SingI 'TKey Source # 
Instance details

Methods

sing :: Sing 'TKey #

SingI 'TKeyHash Source # 
Instance details

Methods

sing :: Sing 'TKeyHash #

SingI 'TMutez Source # 
Instance details

Methods

sing :: Sing 'TMutez #

SingI 'TNat Source # 
Instance details

Methods

sing :: Sing 'TNat #

SingI 'TNever Source # 
Instance details

Methods

sing :: Sing 'TNever #

SingI 'TOperation Source # 
Instance details

Methods

sing :: Sing 'TOperation #

SingI 'TSignature Source # 
Instance details

Methods

sing :: Sing 'TSignature #

SingI 'TString Source # 
Instance details

Methods

sing :: Sing 'TString #

SingI 'TTimestamp Source # 
Instance details

Methods

sing :: Sing 'TTimestamp #

SingI 'TUnit Source # 
Instance details

Methods

sing :: Sing 'TUnit #

SingI1 'TContract Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TContract x) #

SingI1 'TList Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TList x) #

SingI1 'TOption Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TOption x) #

SingI1 'TSet Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TSet x) #

SingI1 'TTicket Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TTicket x) #

SingI1 'TSaplingState Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TSaplingState x) #

SingI1 'TSaplingTransaction Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TSaplingTransaction x) #

SingI2 'TBigMap Source # 
Instance details

Methods

liftSing2 :: forall (x :: k1) (y :: k2). Sing x -> Sing y -> Sing ('TBigMap x y) #

SingI2 'TLambda Source # 
Instance details

Methods

liftSing2 :: forall (x :: k1) (y :: k2). Sing x -> Sing y -> Sing ('TLambda x y) #

SingI2 'TMap Source # 
Instance details

Methods

liftSing2 :: forall (x :: k1) (y :: k2). Sing x -> Sing y -> Sing ('TMap x y) #

SingI2 'TOr Source # 
Instance details

Methods

liftSing2 :: forall (x :: k1) (y :: k2). Sing x -> Sing y -> Sing ('TOr x y) #

SingI2 'TPair Source # 
Instance details

Methods

liftSing2 :: forall (x :: k1) (y :: k2). Sing x -> Sing y -> Sing ('TPair x y) #

SingI n => SingI1 ('TBigMap n :: T -> T) Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TBigMap n x) #

SingI n => SingI1 ('TLambda n :: T -> T) Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TLambda n x) #

SingI n => SingI1 ('TMap n :: T -> T) Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TMap n x) #

SingI n => SingI1 ('TOr n :: T -> T) Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TOr n x) #

SingI n => SingI1 ('TPair n :: T -> T) Source # 
Instance details

Methods

liftSing :: forall (x :: k1). Sing x -> Sing ('TPair n x) #

SingI n => SingI ('TContract n :: T) Source # 
Instance details

Methods

sing :: Sing ('TContract n) #

SingI n => SingI ('TList n :: T) Source # 
Instance details

Methods

sing :: Sing ('TList n) #

SingI n => SingI ('TOption n :: T) Source # 
Instance details

Methods

sing :: Sing ('TOption n) #

SingI n => SingI ('TSaplingState n :: T) Source # 
Instance details

Methods

sing :: Sing ('TSaplingState n) #

SingI n => SingI ('TSaplingTransaction n :: T) Source # 
Instance details

SingI n => SingI ('TSet n :: T) Source # 
Instance details

Methods

sing :: Sing ('TSet n) #

SingI n => SingI ('TTicket n :: T) Source # 
Instance details

Methods

sing :: Sing ('TTicket n) #

(SingI n, SingI n) => SingI ('TBigMap n n :: T) Source # 
Instance details

Methods

sing :: Sing ('TBigMap n0 n) #

(SingI n, SingI n) => SingI ('TLambda n n :: T) Source # 
Instance details

Methods

sing :: Sing ('TLambda n0 n) #

(SingI n, SingI n) => SingI ('TMap n n :: T) Source # 
Instance details

Methods

sing :: Sing ('TMap n0 n) #

(SingI n, SingI n) => SingI ('TOr n n :: T) Source # 
Instance details

Methods

sing :: Sing ('TOr n0 n) #

(SingI n, SingI n) => SingI ('TPair n n :: T) Source # 
Instance details

Methods

sing :: Sing ('TPair n0 n) #