returnpureControl.Applicative有什么区别?似乎即使在pure块的末尾也可以使用do吗?

那么,在任何情况下都应该优先考虑另一个(除了每个人都希望在return块的末尾有一个do)吗?

最佳答案

在GHC 7.8及更高版本中,Applicative不是Monad的父类(super class)。 Monad实例甚至可能没有Applicative实例。但是,人们期望purereturn对于作为两者实例的类型应该具有相同的行为。

在GHC 7.10中,由于存在Functor-Applicative-Monad ProposalApplicative现在是Monad(class Applicative m => Monad m)的父类(super class),并且现在的规则是,所有pure实例的returnMonad必须相同。实际上,return的默认实现现在是pure,如the source on hackage所示。
pure可能比return更受青睐,因为它不会产生Monad约束,而不会产生Applicative约束,因此使函数更通用。由于历史的先例,在注释符号中return可能比pure更可取,但是pure可以用于完全相同的效果。

关于haskell - 'return'和 'pure'之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32788082/

10-11 22:35