我在为Haskell中的日期结构导出Typeable1实例时遇到麻烦。这是我的代码: {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DeriveDataTypeable #-} import Data.Typeable (Typeable,Typeable1) newtype FooM m a = Foo { unFoo :: (a -> Bar m) -> Bar m } newtype Bar m = Atom (m (Maybe (Bar m))) type Baz m = Waldo (FooM m ()) type Waldo a = a data Qux m = Qux { baz :: Baz m , num :: Int } -- deriving Typeable1 [1] -- deriving instance Typeable1 Qux [2]取消注释第一个注释[1]会出现此错误: Cannot derive well-kinded instance of form `Typeable1 (Qux ...)' Class `Typeable1' expects an argument of kind `* -> *' In the data type declaration for `Qux'并且取消注释[2]会出现此错误: Kind mis-match The first argument of `Typeable1' should have kind `* -> *', but `Qux' has kind `(* -> *) -> *' In the stand-alone deriving instance for `Typeable1 Qux'我的问题是:如何添加Typeable的Typeable1 / Qux实例? 最佳答案 您不能将Qux设置为Typeable1的实例,但是在现代GHC中,您应该能够导出Typeable的实例,该实例现在已经足够多态处理此类更高类型的类型,因此及其类似物是不必要的。过时的答案之所以保留,是因为当问问题时它是可接受的答案:不幸的是,您不能这样做:Typeable1层次结构没有用于任何Typeable类型的类型类。由于GHC开始支持种类多态性,这可能会在将来某个时间解决。
10-06 02:28