Module DA.Record¶
Exports the record machinery necessary to allow one to annotate code that is polymorphic in the underlying record type.
Typeclasses¶
class HasField x r a where
HasFieldgives you getter and setter functions for each record field automatically.In the vast majority of use-cases, plain Record syntax should be preferred:
daml> let a = MyRecord 1 "hello" daml> a.foo 1 daml> a.bar "hello" daml> a { bar = "bye" } MyRecord {foo = 1, bar = "bye"} daml> a with foo = 3 MyRecord {foo = 3, bar = "hello"} daml>For more on Record syntax, see https://docs.daml.com/daml/intro/3_Data.html#record.
HasField x r ais a typeclass that takes three parameters. The first parameterxis the field name, the second parameterris the record type, and the last parameterais the type of the field in this record. For example, if we define a type:data MyRecord = MyRecord with foo : Int bar : TextThen we get, for free, the following HasField instances:
HasField "foo" MyRecord Int HasField "bar" MyRecord TextIf we want to get a value using HasField, we can use the
getFieldfunction:getFoo : MyRecord -> Int getFoo r = getField @"foo" r getBar : MyRecord -> Text getBar r = getField @"bar" rNote that this uses the “type application” syntax (
f @t) to specify the field name.Likewise, if we want to set the value in the field, we can use the
setFieldfunction:setFoo : Int -> MyRecord -> MyRecord setFoo a r = setField @"foo" a r setBar : Text -> MyRecord -> MyRecord setBar a r = setField @"bar" a r
- getField
- : r -> a
- setField
- : a -> r -> r