cleveland-0.1.0: lorentz-test/Test/Util/Annotation.hs
-- SPDX-FileCopyrightText: 2020 Tocqueville Group
--
-- SPDX-License-Identifier: LicenseRef-MIT-TQ
module Test.Util.Annotation
( FieldAnnTree (..)
, TypeAnnTree (..)
, extractFieldAnnTree
, extractTypeAnnTree
) where
import Morley.Michelson.Typed
import Morley.Michelson.Untyped (FieldAnn, TypeAnn, noAnn)
-- | Helper datatype which contains field annotations from the given type
data FieldAnnTree t where
FALeaf :: FieldAnnTree t
FANodeOr :: FieldAnn -> FieldAnnTree a
-> FieldAnn -> FieldAnnTree b
-> FieldAnnTree ('TOr a b)
FANodePair :: FieldAnn -> FieldAnnTree a
-> FieldAnn -> FieldAnnTree b
-> FieldAnnTree ('TPair a b)
deriving stock instance Eq (FieldAnnTree t)
deriving stock instance Show (FieldAnnTree t)
extractFieldAnnTree :: Notes t -> FieldAnnTree t
extractFieldAnnTree = \case
NTOr _ lann rann lnotes rnotes ->
FANodeOr lann (extractFieldAnnTree lnotes) rann (extractFieldAnnTree rnotes)
NTPair _ lann rann _ _ lnotes rnotes
| lann == noAnn && rann == noAnn -> FALeaf
| otherwise -> FANodePair lann (extractFieldAnnTree lnotes) rann (extractFieldAnnTree rnotes)
_ ->
FALeaf
-- | Helper datatype which contains type annotations from the given type
data TypeAnnTree t where
TALeaf :: TypeAnn -> TypeAnnTree t
TANodeOption :: TypeAnn -> TypeAnnTree a -> TypeAnnTree ('TOption a)
TANodePair :: TypeAnn -> TypeAnnTree a -> TypeAnnTree b -> TypeAnnTree ('TPair a b)
TANodeOr :: TypeAnn -> TypeAnnTree a -> TypeAnnTree b -> TypeAnnTree ('TOr a b)
TANodeLambda :: TypeAnn -> TypeAnnTree a -> TypeAnnTree b -> TypeAnnTree ('TLambda a b)
TANodeList :: TypeAnn -> TypeAnnTree a -> TypeAnnTree ('TList a)
TANodeMap :: TypeAnn -> TypeAnnTree a -> TypeAnnTree b -> TypeAnnTree ('TMap a b)
TANodeBigMap :: TypeAnn ->TypeAnnTree a -> TypeAnnTree b -> TypeAnnTree ('TBigMap a b)
deriving stock instance Eq (TypeAnnTree t)
deriving stock instance Show (TypeAnnTree t)
extractTypeAnnTree :: Notes t -> TypeAnnTree t
extractTypeAnnTree = \case
NTKey ta -> TALeaf ta
NTUnit ta -> TALeaf ta
NTSignature ta -> TALeaf ta
NTOption ta n1 -> TANodeOption ta (extractTypeAnnTree n1)
NTList ta n1 -> TANodeList ta (extractTypeAnnTree n1)
NTSet ta _ -> TALeaf ta
NTOperation ta -> TALeaf ta
NTContract ta _ -> TALeaf ta
NTTicket ta _ -> TALeaf ta
NTPair ta _ _ _ _ n1 n2 -> TANodePair ta (extractTypeAnnTree n1) (extractTypeAnnTree n2)
NTOr ta _ _ n1 n2 -> TANodeOr ta (extractTypeAnnTree n1) (extractTypeAnnTree n2)
NTLambda ta n1 n2 -> TANodeLambda ta (extractTypeAnnTree n1) (extractTypeAnnTree n2)
NTMap ta n1 n2 -> TANodeMap ta (extractTypeAnnTree n1) (extractTypeAnnTree n2)
NTBigMap ta n1 n2 -> TANodeBigMap ta (extractTypeAnnTree n1) (extractTypeAnnTree n2)
NTChainId ta -> TALeaf ta
NTInt ta -> TALeaf ta
NTNat ta -> TALeaf ta
NTString ta -> TALeaf ta
NTBytes ta -> TALeaf ta
NTMutez ta -> TALeaf ta
NTBool ta -> TALeaf ta
NTKeyHash ta -> TALeaf ta
NTBls12381Fr ta -> TALeaf ta
NTBls12381G1 ta -> TALeaf ta
NTBls12381G2 ta -> TALeaf ta
NTTimestamp ta -> TALeaf ta
NTAddress ta -> TALeaf ta
NTNever ta -> TALeaf ta
NTChest ta -> TALeaf ta
NTChestKey ta -> TALeaf ta