许多 IDE 和插件都谈到提供一些 IDE 功能(例如自动完成、linting 和突出显示)的语言服务器。语言服务器只是在我的机器上运行的一些本地进程,还是我的代码被发送到某个地方进行分析(如果我没有互联网,功能会停止工作)。另外,如果代码被发送到某个地方,那怎么安全呢?
让 Functor 成为 Applicative 和 Monad 的超类有什么意义呢?据我所知,Applicative 和 Monad 都立即暗示了 Functor 唯一遵守法律的实现。但我每次都必须输入相同的 Functor 实现。有没有办法避免这样做?
更进一步,Monad 暗示了 Applicative 唯一遵守法律的实现,那么为什么要让 Applicative 成为 Monad 的超类呢?它再次使得为新数据类型实现 Applicative 变得多余。
有没有一种方法可以制作一个 Monad,而不必实现 Applicative 和 Functor(因为它的操作已经是最通用的)。并且无需实现 Functor 即可创建 Applicative。
我看到了类层次结构的好处,因为我刚才所说的解释了它们之间的“是”关系。但同时必须实现每一个都是烦人的。我只想定义returnand>>=并获取所有 3 个操作的所有操作。