Move method interfaceTypeRep to its own class (#11940)

changelog_begin
changelog_end
This commit is contained in:
Moisés Ackerman 2021-12-04 16:33:58 +01:00 committed by GitHub
parent 03793c97ab
commit ad77eed798
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 19 additions and 14 deletions

View File

@ -17,11 +17,11 @@ load("@os_info//:os_info.bzl", "is_linux", "is_windows")
load("@dadew//:dadew.bzl", "dadew_tool_home")
load("@rules_haskell//haskell:cabal.bzl", "stack_snapshot")
GHC_LIB_REV = "87dda21236dc010afa5cf075d413335d"
GHC_LIB_SHA256 = "8d1e90cd6af1641ca13198e216fd38ff8bfcf69c4cfd5294cdd7589fcf7d2640"
GHC_LIB_REV = "342ccbe3c582820fe9e305e1c3954bba"
GHC_LIB_SHA256 = "96ed0322efc367774cebb00c61945ad5fe276bf1a801734ececc232d55a04591"
GHC_LIB_VERSION = "8.8.1"
GHC_LIB_PARSER_REV = "87dda21236dc010afa5cf075d413335d"
GHC_LIB_PARSER_SHA256 = "a7e1e79956a5b93db5ae61150063a3e44256014bab5722381b9639cd6ee5708d"
GHC_LIB_PARSER_REV = "342ccbe3c582820fe9e305e1c3954bba"
GHC_LIB_PARSER_SHA256 = "287468de32f45bc75c52842817784d16b5a4dd6e7d311d661dfbe57cce7a719e"
GHC_LIB_PARSER_VERSION = "8.8.1"
GHCIDE_REV = "e04b5386b3741b839eb5c3d2a2586fd2aa97229c"
GHCIDE_SHA256 = "1d27926e0ad3c2a9536f23b454875a385ecc766ae68ce48a0ec88d0867884b46"

View File

@ -12,7 +12,7 @@ jobs:
variables:
ghc-lib-sha: '362d4f38a7ac10521393de9b7ad942a77a2605be'
base-sha: '9c787d4d24f2b515934c8503ee2bbd7cfac4da20'
patches: '1a7dbeff4cec600d0d04aa2ae47df649a947ce62 833ca63be2ab14871874ccb6974921e8952802e9'
patches: '6af5f6d01846cf175609f7a79fc27cf3a62016d1 833ca63be2ab14871874ccb6974921e8952802e9'
flavor: 'da-ghc-8.8.1'
steps:
- checkout: self

View File

@ -2,7 +2,6 @@
-- SPDX-License-Identifier: Apache-2.0
{-# LANGUAGE CPP #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE NoImplicitPrelude #-}
@ -16,6 +15,7 @@ module DA.Internal.Desugar (
concat, magic,
Party, ContractId, Update, Any,
NonConsuming(..), PreConsuming(..), PostConsuming(..), Consuming(..),
HasInterfaceTypeRep(..),
Implements(..),
TypeRep,
HasMethod,
@ -39,12 +39,14 @@ data PreConsuming t = PreConsuming {}
data Consuming t = Consuming {}
data PostConsuming t = PostConsuming {}
class Implements t i where
class HasInterfaceTypeRep i where
interfaceTypeRep : i -> TypeRep
class HasInterfaceTypeRep i => Implements t i where
toInterface : t -> i
fromInterface : i -> Optional t
toInterfaceContractId : ContractId t -> ContractId i
fromInterfaceContractId : ContractId i -> Update (Optional (ContractId t))
interfaceTypeRep : t -> TypeRep
{-
Together, `HasMethod`, `Method` and `mkMethod` allow us to desugar the methods of

View File

@ -25,4 +25,7 @@ import DA.Internal.Template.Functions as X
#endif
import DA.Internal.Compatible as X
import DA.Internal.Assert as X
import DA.Internal.Desugar as X (Implements (..))
import DA.Internal.Desugar as X
( HasInterfaceTypeRep(..)
, Implements (..)
)

View File

@ -19,6 +19,9 @@ import DA.Assert ( (===) )
data GHC.Types.DamlInterface => Token = Token GHC.Types.Opaque
instance DA.Internal.Desugar.HasInterfaceTypeRep Token where
interfaceTypeRep = GHC.Types.primitive @"$TO_TYPE_REP"
instance DA.Internal.Desugar.Implements Token Token where
toInterface = GHC.Types.primitive @"EToInterface"
fromInterface = GHC.Types.primitive @"EFromInterface"
@ -26,7 +29,6 @@ instance DA.Internal.Desugar.Implements Token Token where
= GHC.Types.primitive @"EToInterfaceContractId"
fromInterfaceContractId
= GHC.Types.primitive @"UFromInterfaceContractId"
interfaceTypeRep = GHC.Types.primitive @"$TO_TYPE_REP"
instance DA.Internal.Desugar.HasFetch Token where
fetch = GHC.Types.primitive @"UFetchInterface"
@ -307,7 +309,6 @@ instance DA.Internal.Desugar.Implements Asset Token where
= GHC.Types.primitive @"EToInterfaceContractId"
fromInterfaceContractId
= GHC.Types.primitive @"UFromInterfaceContractId"
interfaceTypeRep = GHC.Types.primitive @"$TO_TYPE_REP"
_method_Asset_Token_getOwner
= DA.Internal.Desugar.mkMethod

View File

@ -93,12 +93,11 @@ main = scenario do
alice <- getParty "Alice"
bob <- getParty "Bob"
let asset = Asset alice bob 15
let notAsset = NotAsset alice
let token = toInterface @_ @Token asset
submit alice do
interfaceCreate token
interfaceSignatory token === [alice]
interfaceObserver token === [bob, alice]
unless (interfaceTypeRep @_ @Token token == interfaceTypeRep @_ @Token asset) $ abort "TypeReps are not equal"
unless (interfaceTypeRep @_ @Token token /= interfaceTypeRep @_ @Token notAsset) $ abort "TypeReps are equal"
unless (TemplateTypeRep (interfaceTypeRep token) == templateTypeRep @Asset) $ abort "TypeReps are not equal"
unless (TemplateTypeRep (interfaceTypeRep token) /= templateTypeRep @NotAsset ) $ abort "TypeReps are equal"
pure ()