{-# LANGUAGE DataKinds #-}
module Michelson.Typed.T
( CT (..)
, T (..)
, toUType
, buildStack
) where
import Fmt (Buildable(..), Builder, listF)
import qualified Michelson.Untyped.Annotation as Un
import Michelson.Untyped.Type (CT)
import qualified Michelson.Untyped.Type as Un
data T =
Tc CT
| TKey
| TUnit
| TSignature
| TChainId
| 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 stock (Eq, Show)
toUType :: T -> Un.Type
toUType t = Un.Type (convert t) Un.noAnn
where
convert :: T -> Un.T
convert (Tc a) = Un.Tc a
convert (TKey) = Un.TKey
convert (TUnit) = Un.TUnit
convert (TSignature) = Un.TSignature
convert (TChainId) = Un.TChainId
convert (TOption a) = Un.TOption (toUType a)
convert (TList a) = Un.TList (toUType a)
convert (TSet a) = Un.TSet $ Un.Comparable a Un.noAnn
convert (TOperation) = Un.TOperation
convert (TContract a) = Un.TContract (toUType a)
convert (TPair a b) =
Un.TPair Un.noAnn Un.noAnn (toUType a) (toUType b)
convert (TOr a b) =
Un.TOr Un.noAnn Un.noAnn (toUType a) (toUType b)
convert (TLambda a b) =
Un.TLambda (toUType a) (toUType b)
convert (TMap a b) =
Un.TMap (Un.Comparable a Un.noAnn) (toUType b)
convert (TBigMap a b) =
Un.TBigMap (Un.Comparable a Un.noAnn) (toUType b)
instance Buildable T where
build = build . toUType
buildStack :: [T] -> Builder
buildStack = listF