在Haskell中派生的实例

QSp*_*der 3 haskell deriving

我想使用这样的派生实例:

data Test3D = forall a. (Show a, Eq a, Typeable a, Generic a)
                => Test3D { testDt :: String
                          , testPrm :: a
                          }
   deriving (Show, Eq, Typeable, Generic)

instance Binary (Test3D)
$(deriveJSON defaultOptions ''Test3D)
Run Code Online (Sandbox Code Playgroud)

但是我从GHC收到了:

• Can't make a derived instance of ‘Show Test3D’:
        Constructor ‘Test3D’ has existentials or constraints in its type
        Possible fix: use a standalone deriving declaration instead
• In the data declaration for ‘Test3D’
Run Code Online (Sandbox Code Playgroud)

这种方式对我的项目非常方便.我找不到解决方案.

是否有任何方法可以将派生实例用于此类数据?

lef*_*out 6

是否有任何方法可以将派生实例用于此类数据?

是.做GHC建议的,做一个独立的派生条款:

{-# LANGUAGE StandaloneDeriving, ExistentialQuantification #-}

data Test3D = forall a. (Show a)
                => Test3D { testDt :: String
                          , testPrm :: a
                          }

deriving instance Show Test3D
Run Code Online (Sandbox Code Playgroud)

你不能做的是派生一个Eq实例,因为不同的值实际上可能包含不同的类型,并且只能将它们与动态投射黑客进行比较Typeable.