3

所以,我一直在玩弄 GHC.Generics,它们很棒,但似乎有限/主要集中在生成实例上。

如果可能的话,我想做的是从另一个数据类型派生一个新的数据类型。

假设您有以下类型:

data Xpto = Xpto {
    fstt :: First Int
    lstt :: Last String }

我想“免费”获得以下数据类型:

data Xpto' = Xpto' {
   fstt' :: Int
   lstt' :: String }

我考虑过的一种可能性是使用类型族,但是新数据必须与 Xpto 相同:

class Xptos newtyped where
   type UnNewTyped un :: (same kind as newtyped)

我开始认为这一切都不可能,而且我确信这有充分的理由。

注意 1:我知道这对于 Template Haskell 可能是可行的......只是想知道是否还有其他方法。

4

0 回答 0