lambda-buffers icon indicating copy to clipboard operation
lambda-buffers copied to clipboard

Discuss: PlutusTx Eq instance generation should delegate to BuiltinData equality

Open bladyjoker opened this issue 7 months ago • 2 comments

In Plutarch the general consensus is that we perform Eq by simply delegating to the underling PlutusData representation.

instance PEq FooTrivial where
  (#==) = \l r -> pdata l #== pdata r

PlutusData equality operation is a builtin which is naturally much more performant then doing the obvious field by field comparisons (which is done in PlutusTx PLA types and is generally a practice adopted https://github.com/IntersectMBO/plutus/blob/b34d6ca2c4bbe54c324337eb813a5f6a522b475c/plutus-ledger-api/src/PlutusLedgerApi/V2/Tx.hs#L84).

However, we do assume that there's a single canonical PlutusData representation for all types, which might not be the case for semantically richer types like Set or Map (for example, the underlying AssocMap PlutusData representation can use ascending or descending ordering etc). This is solved by agreeing on a well defined PlutusData representation for any type that might be ambiguous in that regard.

cc @peter-mlabs

bladyjoker avatar Jul 02 '24 10:07 bladyjoker