【发布时间】:2018-04-13 12:54:40
【问题描述】:
((<*>) . (<*>))
--In GHCi
:: (a1 -> a2 -> b) -> ((a1 -> a2) -> a1) -> (a1 -> a2) -> b
为什么是这种类型?怎么会进化成这样的类型?
:t ((<*>) .)
((<*>) .)
:: Applicative f => (a1 -> f (a2 -> b)) -> a1 -> f a2 -> f b
:t (. (<*>))
(. (<*>))
:: Applicative f => ((f a -> f b) -> c) -> f (a -> b) -> c
((<*>) . (<*>))
--from left to right
-
(<*>) :: Applicative f1 => f1 (a1 -> b1) -> f1 a1 -> f1 b1; -
(.) :: (b -> c) -> (a -> b) -> a -> c; -
(<*>) :: Applicative f2 => f2 (a2 -> b2) -> f2 a2 -> f2 b2;
在2.,(a -> b),让3. f2 (a2 -> b2) = a;因此,b 应为f2 a2 -> f2 b2,(b -> c),替换为1.,b 为f1 (a1 -> b1),c 应为f1 a1 -> f1 b1
但是,b 应该彼此相等,f2 a2 -> f2 b2 = f1 (a1 -> b1) ?如何使两者相互适应
在 GHCi 中,它似乎将f (a -> b) 替换为a1 或a2,那么它的进展如何?
【问题讨论】:
-
“为什么是这种类型”是什么意思?
-
记住
(->) a是Applicative。 -
感谢您的评论,我知道这是一个 Applicative,它对改进作文有什么帮助?
标签: haskell function-composition