繁体   English   中英

Haskell中的“fromJust”与“Just =”

[英]“fromJust” vs. “Just =” in Haskell

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

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

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

t = fromJust <thing>

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

fromJust几乎相当于:

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

请注意,它是相同的模式匹配 如果你确定你的Maybe会是Just而不是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

当您确定Maybe类型将返回Just值时,您可以只模式匹配并提取值。

例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM