派生通过:无法派生良种实例
Deriving Via: Cannot derive well-kinded instance
我在尝试派生实例时遇到此错误。
Cannot derive well-kinded instance of form ‘HFunctor (ControlFlowCMD ...)’
Class ‘HFunctor’ expects an argument of kind ‘(* -> *, *)
-> * -> *’
• In the newtype declaration for ‘ControlFlowCMD’
我正在尝试这样做:
newtype ControlFlowCMD fs a = ControlFlowCMD (ControlCMD fs a)
deriving HFunctor via (ControlCMD fs a)
您可以在第 278 行看到我基于我的类型并尝试派生 here 的数据类型和实例。我不习惯使用派生 via - 谁能解释这个错误的含义以及我将如何修复它?
问题是 (* -> *, *)
或等价地 (Type -> Type, Type)
是一个种类级别的元组,必须启用 DataKinds
and PolyKinds
扩展才能处理它。 (虽然我不完全确定为什么需要 PolyKinds
;也许是为了允许更一般的种类推断。)
对于具有复杂种类的数据类型,它通常是 good idea to enable StandaloneKindSignatures
并明确给出种类签名:
import Data.Kind
type ControlFlowCMD :: (Type -> Type, Type) -> Type -> Type
newtype ControlFlowCMD fs a = ...
我在尝试派生实例时遇到此错误。
Cannot derive well-kinded instance of form ‘HFunctor (ControlFlowCMD ...)’
Class ‘HFunctor’ expects an argument of kind ‘(* -> *, *)
-> * -> *’
• In the newtype declaration for ‘ControlFlowCMD’
我正在尝试这样做:
newtype ControlFlowCMD fs a = ControlFlowCMD (ControlCMD fs a)
deriving HFunctor via (ControlCMD fs a)
您可以在第 278 行看到我基于我的类型并尝试派生 here 的数据类型和实例。我不习惯使用派生 via - 谁能解释这个错误的含义以及我将如何修复它?
问题是 (* -> *, *)
或等价地 (Type -> Type, Type)
是一个种类级别的元组,必须启用 DataKinds
and PolyKinds
扩展才能处理它。 (虽然我不完全确定为什么需要 PolyKinds
;也许是为了允许更一般的种类推断。)
对于具有复杂种类的数据类型,它通常是 good idea to enable StandaloneKindSignatures
并明确给出种类签名:
import Data.Kind
type ControlFlowCMD :: (Type -> Type, Type) -> Type -> Type
newtype ControlFlowCMD fs a = ...