Description
Cf. #2255 of which this is somehow a generalisation ...
Thanks to the sophistication of the re-exporting strategies embodied in Relation.Binary.Bundles
, we could streamline concrete instances of such strategies, such as in Data.List.Binary.Relation.Equality.DecSetoid
.
Compare the following (23 LOC; 3 import
s; 1 explicit definition; and 2 public
re-exports, the first of which also introduces the correct fixity, the second shared with the existing version): UPDATED in the light of errors caught by #2490 ;-)
open import Relation.Binary.Bundles using (DecSetoid)
module Data.List.Relation.Binary.Equality.DecSetoid
{a ℓ} (DS : DecSetoid a ℓ) where
import Data.List.Relation.Binary.Equality.Setoid as SetoidEquality
open import Data.List.Relation.Binary.Pointwise using (decSetoid)
open DecSetoid DS using (setoid)
------------------------------------------------------------------------
-- Additional properties
≋-decSetoid : DecSetoid _ _
≋-decSetoid = decSetoid DS
open DecSetoid ≋-decSetoid public
using ()
renaming (isDecEquivalence to ≋-isDecEquivalence; _≟_ to _≋?_)
------------------------------------------------------------------------
-- Make all definitions from setoid equality available
open SetoidEquality setoid public
with the existing version (31 LOC; 7 import
s; 3 explicit definitions, incl. the fixity declaration; and the 1 public
re-export shared with the above).
So we trade economy of expression/export for explicitness of definition... although in each case, such definitions are largely by delegation, so it's not immediately clear that there is much gain in understanding, except the documentation afforded by the types...
Which is 'better'/preferable, and which style should the library adopt from v2.* onwards?