【发布时间】:2019-02-19 07:29:08
【问题描述】:
我从 https://www.haskell.org/tutorial/pitfalls.html 页面上读到了单态限制,但无法理解最后一点:
定义的函数经常违反限制 以更高阶的方式,如在 sum 的这个定义中 标准前奏:
sum = foldl (+) 0按原样,这会导致静态类型错误。我们可以通过以下方式解决问题 添加类型签名:
sum :: (Num a) => [a] -> a还要注意,如果我们这样写就不会出现这个问题:
sum xs = foldl (+) 0 xs因为该限制仅适用于模式绑定。
为什么最后一点不会导致任何错误?
【问题讨论】:
-
顺便说一句,最后一个方程没有使用无点样式,那就意味着避免提及
xs。
标签: haskell