Haskell 类型族和派生实例(Eq)
如果提供额外的帮助(例如,某个地方的Eq a),是否可以导出B a的Eq实例Haskell 类型族和派生实例(Eq),haskell,type-families,Haskell,Type Families,如果提供额外的帮助(例如,某个地方的Eq a),是否可以导出B a的Eq实例 {-# LANGUAGE TypeFamilies #-} class A a where type B a somef :: a -> B a -> B a -> Bool 问题和答案很接近。 以下内容不起作用,也没有对B型a-线进行类似的修改,或者只是尝试了错误的修改 {-# LANGUAGE StandaloneDeriving #-} -- deriving instance E
{-# LANGUAGE TypeFamilies #-}
class A a where
type B a
somef :: a -> B a -> B a -> Bool
问题和答案很接近。
以下内容不起作用,也没有对B型a-线进行类似的修改,或者只是尝试了错误的修改
{-# LANGUAGE StandaloneDeriving #-}
-- deriving instance Eq (B a) -- illegal application
-- deriving instance Eq a => Eq (B a) -- illegal application
约束Eq a=>a没有帮助。向somef添加约束会编译somef::Eq a=>。。。并且对这种方法有效。然而,在这种情况下,最好能够知道类型B a通常是可等式的,这样不可等式的B a将不被允许,也不是逐个方法的。我认为这就做到了
{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
class Eq (B a) => A a where
type B a
somef :: a -> B a -> B a -> Bool
为了验证它是否有效,接受以下实例
data HasEqInstance = HasEqInstance deriving Eq
instance A () where
type B () = HasEqInstance
somef = undefined
但这一条被拒绝了,没有任何立场的例子
我想这就是诀窍
{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
class Eq (B a) => A a where
type B a
somef :: a -> B a -> B a -> Bool
为了验证它是否有效,接受以下实例
data HasEqInstance = HasEqInstance deriving Eq
instance A () where
type B () = HasEqInstance
somef = undefined
但这一条被拒绝了,没有任何立场的例子
您希望能够将类实例限制为类型本身为Eq实例吗?是,将B a类型实例限制为类型本身为Eq实例。您希望能够将类实例限制为类型本身为Eq实例吗?是,为了能够将B a类型的实例限制为本身就是Eq.Kudos实例的类型,现在看来很清楚我在类型族上迈出了第一步。Kudos,现在看来很清楚我在类型族上迈出了第一步。