{-# LANGUAGE DataKinds #-}
module Michelson.Typed.T
( CT (..)
, T (..)
, ToCT
, ToT
) where
import Michelson.Untyped.Type (CT(..), ToCT)
import Tezos.Address (Address)
import Tezos.Core (Mutez, Timestamp)
import Tezos.Crypto (KeyHash, PublicKey, Signature)
data T =
Tc CT
| TKey
| TUnit
| TSignature
| TOption T
| TList T
| TSet CT
| TOperation
| TContract T
| TPair T T
| TOr T T
| TLambda T T
| TMap CT T
| TBigMap CT T
deriving (Eq, Show)
type family ToT t :: T where
ToT Integer = 'Tc (ToCT Integer)
ToT Int = 'Tc (ToCT Int)
ToT Natural = 'Tc (ToCT Natural)
ToT Word64 = 'Tc (ToCT Word64)
ToT Text = 'Tc (ToCT Text)
ToT Bool = 'Tc (ToCT Bool)
ToT ByteString = 'Tc (ToCT ByteString)
ToT Mutez = 'Tc (ToCT Mutez)
ToT Address = 'Tc (ToCT Address)
ToT KeyHash = 'Tc (ToCT KeyHash)
ToT Timestamp = 'Tc (ToCT Timestamp)
ToT () = 'TUnit
ToT (a, b) = 'TPair (ToT a) (ToT b)
ToT [a] = 'TList (ToT a)
ToT (Maybe a) = 'TOption (ToT a)
ToT (Either a b) = 'TOr (ToT a) (ToT b)
ToT (Set k) = 'TSet (ToCT k)
ToT (Map k v) = 'TMap (ToCT k) (ToT v)
ToT PublicKey = 'TKey
ToT Signature = 'TSignature