Skip to content

Generalized isomorphic deriving

A newtype is isomorphic to the type that it is based on. For example, newtype A = A Int is isomorphic to Int, so it is possible to automatically derive all of Int's instance for A.

It would be nice if this could be extended to other datatypes that were isomorphic to each other. For example, this would work

data K a = K a a a

instance C (K a) where
  ...

data L a = L a a a
  deriving (Eq,C<-K,Show)

where the C<-K notation means "derive an instance of C for this type that is 'the same as' the instance of C for K". The compiler would have to check that K and L were actually isomorphic.

I don't know if this is possible with the current internals of GHC, but it would be cool if it would be done. My main usage scenario would be deriving things for single-argument data constructors based on tuples; for example for serialization classes.

Trac metadata
Trac field Value
Version 6.10.2
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information