Haskell 如何理解列表的可遍历实现

Haskell 如何理解列表的可遍历实现,haskell,traversable,Haskell,Traversable,我很难理解以下内容: 特别是,()类型的以下派生有什么问题 (:)::a->[a]->[a] ()::a->b->F a->F b,F代表函子 (因此……) (:)::fa->F([a]->[a]) f::a->AB:((->)a)(AB),a代表应用程序 (因此……) (:)f:((->)a)([a]->[a]) (:)f a::[a]->[a] ()::A(A->b)->A->A b 下面的推导有什么问题 这段话的问题在于: (:) <$> f :: ((->) a)

我很难理解以下内容:

特别是,
()
类型的以下派生有什么问题

(:)::a->[a]->[a]
()::a->b->F a->F b,F代表函子
(因此……)

(:)::fa->F([a]->[a])
f::a->AB:((->)a)(AB),a代表应用程序
(因此……)

(:)f:((->)a)([a]->[a])
(:)f a::[a]->[a]
()::A(A->b)->A->A b
下面的推导有什么问题

这段话的问题在于:

(:) <$> f :: ((->) a) ([a] -> [a])
(:)f:((->)a)([a]->[a])
函数应用程序始终优先于任何运算符,因此
(:)fa
不像在派生中那样是
(:)f)a
,而是
(:)(fa)
。接下来的步骤很顺利(在阅读下面的解决方案之前,您可能希望自己尝试完成它):

(:)::fa->F([a]->[a])——派生的第三行。
f::a->a和b
a::a b
(:)f a::a([b]->[b])
()::A(A->b)->A->A
(:)f a::a([b]->[b])
(:)fa::a[b]->a[b]
b::A[b]
(:)fab::a[b]

请您更准确地说明您不理解的内容好吗?你已经可以折叠、
函子和
应用程序了吗?很难知道一个人需要写多少才能以当前的形式回答你的问题。是的,我对函子和应用程序略知一二。怎样才能(:)fab::f[b]?(:)::a->[a]->[a],()::a->b->f a->f b,应该(:)是f(a->[a])->f[a]?你应该编辑你的问题来添加你刚才说的内容。这样,它就不太可能因为不清楚或太宽泛而被忽视或关闭。请注意,如果你在最初的问题中清楚地解释了你想问什么,你得到的五张反对票是完全可以避免的。在以后的提问中,请记住这一点。非常感谢,我在这里呆了几天,谢谢你的帮助!
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
(:) <$> f :: ((->) a) ([a] -> [a])
(:) <$>     :: F a -> F ([a] -> [a]) -- The third line of your derivation.
f           :: a -> A b
f a         :: A b
(:) <$> f a :: A ([b] -> [b])
(<*>)             :: A (a -> b) -> A a -> A b
(:) <$> f a       :: A ([b] -> [b])
(:) <$> f a <*>   :: A [b] -> A [b]
b                 :: A [b]
(:) <$> f a <*> b :: A [b]