請執行以下功能:撰寫應用性功能
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