Haskell中的“fromJust”与“Just =”

时间:2014-05-22 18:55:04

标签: haskell maybe

Haskell新手在这里。我试图了解Haskell的diagrams库中的this示例。具体来说,有这样的一行:

Just t = <thing>其中<thing>的类型为Maybe (Tree a)

我不明白这是做什么的。我知道我们需要从Maybe中获取价值。我用

替换了那行代码

t = fromJust <thing>

它的工作方式相同。两条线之间有什么区别,有人可以解释第一条线在做什么吗?

3 个答案:

答案 0 :(得分:9)

fromJust几乎相当于:

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

请注意它是相同的pattern match!如果您确定Maybe将成为Just而不是Nothing,则可以使用fromJust获取其值而不进行模式匹配,但匹配更清晰在大多数情况下,所以你不需要它。

答案 1 :(得分:3)

虽然两种形式都有相同的用途,但

如果出现意外错误,模式匹配表单将为您提供错误位置的更好线索。 ( 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

答案 2 :(得分:1)

如果您确定Maybe类型将返回Just值,则可以模式匹配并提取值。

示例:

Just t = Just 3会将值3分配给t。您可以在ghci中加载并自行验证。 fromJust是相同的,但它更像是一个函数应用程序。