所以真实世界的 Haskell说:
每个 monad 转换器都是 MonadTrans 的一个实例
但我正在和Scotty一起玩,发现它的基本单子转换ScottyT
器不是MonadTrans
.
查看发行说明,似乎这是一个经过深思熟虑的设计决定:here。引用:
ScottyT 的 monad 参数已经解耦,导致 ScottyT 构造函数的类型发生变化。结果,ScottyT 不再是 MonadTrans 实例......
我希望你能理解我的困惑。尽管如此,我将尝试提出严格的问题:
- 为什么不希望 monad 转换器成为 的一个实例
MonadTrans
? - 您如何解释上述 ScottyT 设计的变化?
PS:我明白我可以定义一个MonadTrans ScottyT
自己的实例,但我应该吗?(链接回问题)