我在用 Learn You a Haskell 中的一个例子开玩笑,我不确定出了什么问题。这是模仿真/假语义的原始示例:
class YesNo a where
yesno :: a -> Bool
一个简单的例子由下式给出:
instance YesNo Int where
yesno 0 = False
yesno _ = True
然后后来:
instance YesNo (Maybe a) where
yesno (Just _) = True
yesno Nothing = False
这在一定程度上是有道理的,但我觉得这个想法yesno (Just False) == True
有点违反直觉,所以我试着像这样修改它:
instance YesNo (Maybe a) where
yesno (Just b) = yesno b
yesno Nothing = False
因此,在 Maybe 实例包含一个值的情况下,我们可以得到该值本身的真实性。但是,这会失败并出现错误No instance for (YesNo a) arising from a use of
yesno'`。我究竟做错了什么?