IntersectMBO / plutus

The Plutus language implementation and tools
Apache License 2.0
1.56k stars 477 forks source link

Derivation of Ord type class #4273

Open mgajda opened 2 years ago

mgajda commented 2 years ago

Describe the feature you'd like

PlutusTx.Ord does not have automatic derivation mechanism which means a lot of error-prone work for large algebraic datatypes.

It would be nice to have TemplateHaskell derivation deriveOrd just like makeLift or a mechanism based on Generic.

Describe alternatives you've considered

Alternative is to manually derive Ord instances. It is not only a lot of manual work (with 20 constructors we see about 190 comparisons), but it is also error prone. Since this work also needs to be audited, any such work may also lead to slight increase in cost of the smart contract security.

Describe the approach you would take to implement this

I would follow makeLift as a template, and define the deriveOrd in a similar fashion. Please let me know if you have a better plan.

Additional context / screenshots

Several type classes as fundamental for best practice of Haskell programming and derived automatically for ADTs:

Expansion of this work can serve to help maintain the best practices of using these without extra coding.

michaelpj commented 2 years ago

While this would be nice, writing large amounts of TH is fairly unpleasant and error-prone. This would be a good thing for someone to contribute!

effectfully commented 1 year ago

Whatever we do to resolve #5129 will help with this issue as well.