Nic*_* M. 5 haskell list-comprehension
今天我看到了以下代码:
Prelude> [a | Just a <- [Just 10, Nothing, Just 20]]
[10, 20]
Run Code Online (Sandbox Code Playgroud)
有用.但我认为上面的列表理解只是...的语法糖
[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x)
Run Code Online (Sandbox Code Playgroud)
... Haskell在遇到时Nothing会发出错误*** Exception: Non-exhaustive patterns in lambda.
所以我的问题是:什么[a | Just a <- [Just 10, Nothing, Just 20]]转化为(在monadic代码方面)使它忽略了Nothing?
我认为另一个问题的最佳答案实际上是引用“编译器魔法”的答案。您正在匹配模式Just x,根据Haskell 2010 报告,行为被指定为
..如果匹配失败,则简单地跳过列表中的该元素。
因此,我认为实现可以随意执行此操作(即,脱糖不一定是唯一的)。
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |