我正在尝试使用scanl
Haskell 中的函数。我已经缩小了我的问题范围,可以在以下两种情况下描述,可以使用 Haskell 中的普通库在解释器中运行,该库包含(请注意,我不一定对这里的 Monadic 值感兴趣,但只是scanl
如何用于scanl
确保类型一致性):
为什么以下预先列出Right value
的工作有效:
*Defs> scanl (\x acc -> x ++ acc) [] [[(Right 1)], [(Right 2)]]
[[],[Right 1],[Right 1,Right 2]]
当这不起作用并导致以下错误消息时:
*Defs> scanl (\x acc -> [x] ++ acc) [] [(Right 1), (Right 2)]
<interactive>:36:35: error:
* Couldn't match expected type `[[a]]'
with actual type `Either a0 b0'
...
我认为你已经交换了值和累加器。考虑以下类型
scanl
:累加器值的类型为
b
。它是第一位的。如果您交换第二个示例中的参数,它会起作用:
您还可以交换第一个示例的参数,这也有效: