-5
理解這Traversable的執行以下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」了嗎?很難知道需要寫多少才能以目前的形式回答你的問題。 – duplode
是的,我知道一點關於Functor和Applicative。如何可以(:) <$> f a <*> b :: f [b]? (:) :: a - > [a] - > [a],(<$>):: a-> b-> f a-> fb,應該(:) <$>爲f(a - > [a]) - > f [a]? – beHappy
你應該編輯你的問題,添加你剛剛對它說的話。那樣的話,由於不清楚或者過於寬泛,它最終會被忽略或關閉。 – duplode