IntersectMBO / cardano-ledger

The ledger implementation and specifications of the Cardano blockchain.
Apache License 2.0
261 stars 156 forks source link

Fix `COMPLETE` for all type class based pattern synonyms #4613

Open lehins opened 2 months ago

lehins commented 2 months ago

We have a few type class based pattern synonyms:

All of these cannot have a COMPLETE pragma implemented for them, since ghc-8.10 does not support new syntax with the type. For example that is why we had to reject this RP: https://github.com/IntersectMBO/cardano-ledger/pull/4481/files

Which tried to add an incorrect pattern:

{-# COMPLETE
  RequireSignature
  , RequireAllOf
  , RequireAnyOf
  , RequireMOf
  #-}

since it would disregard timelock's RequireTimeStart and RequireTimeExpire.

Therefore, the correct way to solve this is to specify COMPELTE pragma for each era:

{-# COMPLETE
  RequireSignature
  , RequireAllOf
  , RequireAnyOf
  , RequireMOf :: Shelley
  #-}
{-# COMPLETE
  RequireSignature
  , RequireAllOf
  , RequireAnyOf
  , RequireMOf
  , RequireTimeStart
  , RequireTimeExpire :: Allegra
  #-}

etc.

lehins commented 2 months ago

This could be done before we deprecate usage of GHC-8.10 with some CPP