Haskell新手在这里.我试图从Haskell的库中理解这个例子diagrams.具体来说,有这样一条线:
Just t = <thing>哪里<thing>是类型Maybe (Tree a)
我不明白这是做什么的.我知道我们需要从中获取价值Maybe.我替换了那行代码
t = fromJust <thing>
它的工作方式相同.两条线之间有什么区别,有人可以解释第一条线在做什么吗?
fromJust 几乎相当于:
fromJust :: Maybe a -> a
fromJust (Just t) = t
Run Code Online (Sandbox Code Playgroud)
请注意,它是相同的模式匹配!如果你确定你Maybe将成为a Just而不是a Nothing,你可以使用它fromJust来获得它没有模式匹配的值,但在大多数情况下匹配更清晰,所以你不需要它.
尽管两种形式都有相同的目的,
如果出现意外错误,模式匹配表单将为您提供错误位置的更好线索。(fromJust错误异常是从fromJust内部抛出的,而失败的模式匹配将为您提供不完整代码的文件、行和列)
$ ghci
Prelude> :m +Data.Maybe
Prelude Data.Maybe> let t = fromJust Nothing
Prelude Data.Maybe> t
*** Exception: Maybe.fromJust: Nothing
Prelude Data.Maybe> let Just t = Nothing
Prelude Data.Maybe> t
*** Exception: <interactive>:7:5-20: Irrefutable pattern failed for pattern Data.Maybe.Just t
Run Code Online (Sandbox Code Playgroud)