我目前在Learn you a Haskell的第 8 章,我已经到达了关于typeclass 的部分。在上述部分中,作者给出了如何使不同类型成为类实例的示例(例如,自定义类型等)。看到这一点,我决定(为了好玩和练习)尝试为该类型实现一个实例。当然,所有这些都忽略了。Functor
Maybe
Tree
Data.Set
Data.Set.map
实际实例本身非常简单,我将其写为:
instance Functor Set.Set where
fmap f empty = Set.empty
fmap f s = Set.fromList $ map f (Set.elems s)
但是,由于我碰巧使用了这个函数,fromList
这会引入一个类约束,调用Set
to be中使用的类型Ord
,正如编译器错误所解释的那样:
Error occurred
ERROR line 4 - Cannot justify constraints in instance member binding
*** Expression : fmap
*** Type : Functor Set => (a -> b) -> Set a -> Set b
*** Given context : Functor Set
*** Constraints : Ord b
请参阅:实时示例
我尝试对实例施加约束,或向 中添加类型签名fmap
,但均未成功(两者也是编译器错误。)
在这种情况下,如何实现和满足约束?有没有可能的方法?
提前致谢!:)