为什么ZipList不是列表的默认应用实例

时间:2016-06-04 07:15:27

标签: haskell applicative

我目前正在Haskell学习Applicatives。如果我没有错,列表有两个不同的Applicative实例,(var tasksRead = Enumerable.Range(3, 35).Select(i => ReadSensorsAsync(i)).ToList(); List - 第二个被定义为包装List值的newtype。 ZipList适用的实例对我来说似乎更直观。

这可能是一个愚蠢的问题,但是有一个特定的原因ZipList不是列表的默认应用实例。

ZipList

是因为Applicative List的分发版本也恰好有Monad实例吗?

1 个答案:

答案 0 :(得分:13)

我怀疑这里的诚实回答是“历史意外”。 monad抽象在应用之前很受欢迎;由于有一个自然列表monad,该实例已定义。为了向后兼容,保持仿函数和应用程序实例保持一致是有意义的。

那就是说,如果我们今天必须再次做出选择,我认为无论如何我都会支持当前的情况:非确定性monad是有用的作为语法上便宜的回溯搜索,我已经采取了经常的优势;任意性拉链(根据我的个人经验)是一种不那么频繁的需求。