Trying to grasp the concepts of Daml interfaces and its usage in Daml Finance.
One of the things I noticed that for some interfaces, the View type exposes data that is only used by the implementation, not the interface. I understand anyone fetching that interface contract would get access to the data as well, but in some cases I am confused on whether that is desired.
To give a concrete example, please look at the interface NumericObservable and an implementation Observation. View contains observations, being a Map Time Decimal, but it also defines a non-consuming choice Observe, which seems to contain the logic of observing those observations at some time t. Now what would be the rationale to expose the observations in the view in this case?
1 Like
Hi @eriktim,
Thanks for your question.
A rationale for exposing data in the view is for e.g. displaying purposes in a template-agnostic UI. Your UI would work only against the interface type rather than the concrete template type.
In the specific case of NumericObservable, however, it is indeed undesirable to expose the observations in the view, as that would prevent us from defining additional observation templates such as the below. We will rectify this in an upcoming Daml Finance version.
Thanks,
Matteo
-- | Observe 1.0 if a credit event has happened, 0.0 otherwise
template CreditEventObservation
with
provider : Party
-- ^ The reference data provider.
id : Id
-- ^ A textual identifier.
creditEventTime : Optional Time
-- ^ Identifies when a credit event has happened.
observers : PartiesMap
-- ^ Observers.
where
signatory provider
observer Disclosure.flattenObservers observers
interface instance NumericObservable.I for CreditEventObservation where
observe t =
case creditEventTime of
Some s | t >= s -> pure 1.0
_ -> pure 0.0
1 Like
Ah in that sense the name View fits nicely as well 
Thanks for the clear explanation, @Matteo_Limberto!