【发布时间】:2016-10-28 09:25:31
【问题描述】:
我无法理解以下example from the NICTA course:
instance Traversable List where
traverse ::
Applicative f =>
(a -> f b)
-> List a
-> f (List b)
traverse f =
foldRight (\a b -> (:.) <$> f a <*> b) (pure Nil)
接下来,我将List替换为[],所以我们有:
instance Traversable [] where
traverse ::
Applicative f =>
(a -> f b)
-> [a]
-> f ([b])
traverse f =
foldRight (\a b -> (:) <$> f a <*> b) []
特别是(<*>) 类型的以下推导有什么问题?
(:) :: a -> [a] -> [a]
(<$>) :: a -> b -> F a -> F b, F for Functor
(因此...)
(:) <$> :: F a -> F ([a] -> [a])
f :: a -> A b :: ((->) a) (A b), A for Applicative
(因此...)
(:) <$> f :: ((->) a) ([a] -> [a])
(:) <$> f a :: [a] -> [a]
(<*>) :: A (a -> b) -> A a -> A b
【问题讨论】:
-
能否请您更准确地说明您不了解的内容?你可以折叠
Functor和Applicative了吗?很难知道一个人需要写多少才能以目前的形式回答您的问题。 -
是的,我对 Functor 和 Applicative 有所了解。 (:) f a b ::f [b] 怎么可能? (:) :: a->[a]->[a], ():: a->b->f a->f b, (:) 应该是 f (a->[ a])->f [a]?
-
您应该编辑您的问题以添加您刚才所说的内容。这样一来,它就不太可能因为不清楚或过于宽泛而最终被忽略或关闭。
-
请注意,如果您在原始问题中清楚地解释了您想问的问题,那么您得到的五次反对票是完全可以避免的。请记住这一点,以备将来提问。
-
非常感谢
标签: haskell traversable