Haskell中的"fromJust"与"Just ="

Eli*_*ICA 4 haskell maybe

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

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

我不明白这是做什么的.我知道我们需要从中获取价值Maybe.我替换了那行代码

t = fromJust <thing>

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

Ry-*_*Ry- 9

fromJust 几乎相当于:

fromJust :: Maybe a -> a
fromJust (Just t) = t
Run Code Online (Sandbox Code Playgroud)

请注意,它是相同的模式匹配!如果你确定你Maybe将成为a Just而不是a Nothing,你可以使用它fromJust来获得它没有模式匹配的值,但在大多数情况下匹配更清晰,所以你不需要它.

  • OP的同义词:当有疑问时,假设你不确定`Maybe`将会是'Just`.此外,在这种情况下匹配更清晰的一个原因是因为它使您更容易跳过案例.GHC甚至可以通过标志`-fwarn-incomplete-patterns`来警告你,如果你使用`fromJust`就不会发生这种情况. (5认同)

Gab*_*iba 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
Run Code Online (Sandbox Code Playgroud)