Haskell新手在这里。我试图了解Haskell的diagrams
库中的this示例。具体来说,有这样的一行:
Just t = <thing>
其中<thing>
的类型为Maybe (Tree a)
我不明白这是做什么的。我知道我们需要从Maybe
中获取价值。我用
t = fromJust <thing>
它的工作方式相同。两条线之间有什么区别,有人可以解释第一条线在做什么吗?
答案 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
是相同的,但它更像是一个函数应用程序。