有人可以向我解释这段代码片段的作用(主要是最后两行)吗?我不应该把Nothing传递给defValue吗?我尝试了一个错误“使用'defValue'时没有(Def,a0)的实例”
class Def a where
defValue :: a -> a
instance Def a => Def (Maybe a) where
defValue ~(Just x) = Just (defValue x)
答案 0 :(得分:3)
此问题与模式无关,事实上,如果您声明了
,则会出现相同的错误消息instance Def a => Def (Maybe a) where
defValue = undefined
事实上,你的代码应该工作(尽可能的,但是我会说你的整个想法都不好,不需要时非常不安全),但要使用{{ 1}}实例你需要一个打包类型的实例来处理。例如,如果添加
Maybe
然后你可以做
DefVals> defValue(Just 1 :: Maybe Int)
只是0
DefVals> defValue(Nothing :: Maybe Int)
只是0