到这里一半...
https://en.wikibooks.org/wiki/Haskell/Laziness
...是一个练习,询问更改head
使用无可辩驳的模式的功能的替代实现的影响。它提供了如下定义,注意由于第一个方程的无可辩驳的匹配head'
,它总是会返回:undefined
head' :: [a] -> a
head' ~[] = undefined
head' ~(x:xs) = x
然后它问:
- 为什么不改变方程的顺序来
head'
帮助这里? - 如果将第一个等式更改为使用普通的可反驳模式,那么 的行为
head'
仍然会与 的行为不同head
吗?如果是这样,怎么做?
在 GHC 7.8.4 中,似乎更改顺序“有助于”至少使该函数的行为类似于 的常规部分版本head
,尽管在空列表情况下有不同的例外。在我看来,第二个问题的答案是“否”,但考虑到“如果是这样,如何”附录,感觉我在这里也必须遗漏一些东西。任何人都可以启发我吗?不幸的是,页面上的解决方案链接不包括此练习。