Haskell中的懒惰模式

时间:2014-03-02 18:58:47

标签: haskell

有人可以向我解释这段代码片段的作用(主要是最后两行)吗?我不应该把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)

1 个答案:

答案 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