【发布时间】:2021-01-02 02:17:42
【问题描述】:
我是 Haskell 的新手,在玩课程时偶然发现了这个问题。
所以基本上不是在类中定义函数,而是定义变量。在我的例子中,我在类Maxable 中定义了一个变量maxvalue。这对Int 工作得很好。现在假设类型a 是Maxable 的一个实例,我想定义instance Maxable (Maybe a),你可以在我的代码的第三块中看到它不起作用。
class Maxable a where
maxvalue :: a
-- This works fine
instance Maxable Int where
maxvalue = 2147483647
-- Error: Could not deduce (Maxable a1) arising from a use of ‘maxvalue’
instance Maxable a => Maxable (Maybe a) where
maxvalue = maxvalue :: a
我应该用什么替换 maxvalue = maxvalue :: a 以便 "(Maybe a).maxvalue == a.maxvalue" ?
【问题讨论】:
-
(另见
Bounded类型类) -
写
InstanceSigs会有帮助。Int实例具有类型签名maxvalue :: Int。Maybe a实例具有签名maxvalue :: Maybe a。
标签: haskell