我想我在hackage文章中Control.Applicative发现了一个缺陷.作为应用仿函数法的描述,它说:
Run Code Online (Sandbox Code Playgroud)class Functor f => Applicative f where带有应用程序的仿函数,提供嵌入纯表达式(
pure)和序列计算的操作,并组合它们的结果(<*>).最小完整定义必须包括满足以下法则的这些函数的实现:
身分
Run Code Online (Sandbox Code Playgroud)pure id <*> v = v组成
Run Code Online (Sandbox Code Playgroud)pure (.) <*> u <*> v <*> w = u <*> (v <*> w)同态
Run Code Online (Sandbox Code Playgroud)pure f <*> pure x = pure (f x)互换
Run Code Online (Sandbox Code Playgroud)u <*> pure y = pure ($ y) <*> u
(请注意,这并未说明有关fmap的任何内容)并且它声明这些法律确定了Functor实例:
作为这些法律的结果,
Functorf 的实例将满足Run Code Online (Sandbox Code Playgroud)fmap f x = pure f <*> x
我一开始以为这显然是错的.也就是说,我猜测必须存在t满足以下两个条件的类型构造函数:
t是一个 …