-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