4

Haskell新手在这里。我试图从 Haskell 的库中理解这个例子。diagrams具体来说,有这样一行:

Just t = <thing><thing>类型在哪里Maybe (Tree a)

我不明白这是在做什么。我知道我们需要从Maybe. 我用那行代码替换了

t = fromJust <thing>

它的工作原理相同。这两行之间有什么区别,谁能解释第一行在做什么?

4

3 回答 3

11

fromJust几乎等同于:

fromJust :: Maybe a -> a
fromJust (Just t) = t

请注意,它是相同的模式匹配!如果您确定您Maybe将成为 aJust而不是 a Nothing,则可以使用fromJust它来获取其值而无需模式匹配,但在大多数情况下匹配更清晰,因此您在这里不需要它。

于 2014-05-22T19:00:13.210 回答
5

虽然这两种形式的目的相同,

如果出现意外错误,模式匹配表将为您提供更好的错误位置线索。(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
于 2014-05-23T16:26:44.793 回答
1

当您非常确定该Maybe类型将返回一个Just值时,您可以只进行模式匹配并提取该值。

例子:

Just t = Just 3将赋值 3 到t. 您可以将其加载ghci并自己验证。fromJust是一样的,但更多的是功能应用。

于 2014-05-22T18:59:19.927 回答