それで、私は GHC.Generics を少しいじってみました。これは素晴らしいものですが、主にインスタンスの生成に限定されているように見えます。
可能であれば、別のデータ型から新しいデータ型を派生させたいと考えています。
次のタイプがあるとします。
data Xpto = Xpto {
fstt :: First Int
lstt :: Last String }
次のデータ型を「無料で」取得したいと思います。
data Xpto' = Xpto' {
fstt' :: Int
lstt' :: String }
私が考えた 1 つの可能性は、型ファミリを使用することでしたが、新しいデータは Xpto と同じ種類を取得する必要があります。
class Xptos newtyped where
type UnNewTyped un :: (same kind as newtyped)
私はこれのどれも不可能だと考え始めており、それには正当な理由があると確信しています。
注 1: これは Template Haskell でおそらく実行可能であることを知っています...他の方法があるかどうか疑問に思っています。