[英]“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.