mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-19 16:57:40 +03:00
Move method interfaceTypeRep to its own class (#11940)
changelog_begin changelog_end
This commit is contained in:
parent
03793c97ab
commit
ad77eed798
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 (..)
|
||||
)
|
||||
|
@ -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
|
||||
|
@ -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 ()
|
||||
|
Loading…
Reference in New Issue
Block a user