请执行以下功能:撰写应用性功能
composeApplicative :: (Applicative f) => f (b -> c) -> f (a -> b) -> f (a -> c)
这样的:
(composeApplicative f g) <*> x == f <*> (g <*> x)
或者,解释为什么这不能做?
请执行以下功能:撰写应用性功能
composeApplicative :: (Applicative f) => f (b -> c) -> f (a -> b) -> f (a -> c)
这样的:
(composeApplicative f g) <*> x == f <*> (g <*> x)
或者,解释为什么这不能做?
这是可以做到:
composeApplicative p q = (.) <$> p <*> q
欲了解更多信息,read the documentation for Applicative functors,更具体地说,组成法律。实际上,任何Applicative
实例composeApplicative f g <*> x
必须总是等于f <*> (g <*> x)
。
作为一个小技术笔记,当进行等式推理时,等式的左侧和右侧必须用一个等号(=
)分隔开。双等号(==
)保留为decidable runtime equality checks。
“作为一个小技术笔记,在进行等式推理时,方程的左右两边必须用一个等号(=)分开,双等号(==)被保留用于可判定的运行时等式检查“。这不是共识规则;许多备受瞩目的Haskeller使用==来进行等式推理。 GHC文件甚至没有一贯地遵循它;见例如[Functor和Monad的文档](https://hackage.haskell.org/package/base-4.8.0.0/docs/Control-Monad.html#t:Functor)。 –
@LuisCasillas:采取的要点。但我认为将平等区分为*命题*(其可能或可能不可判定)和*判决程序*(对于任意类型通常不存在)是有用的。 – pyon
'composeApplicative p q =(。)<$> p <*> q' – pyon
这功课吗?你有什么尝试? – Jubobs
我正在投票结束这个问题作为题外话,因为它可能是作业,并没有显示任何努力。 – Jubobs