类 Applicative 声明为:
class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
我们可以用
fmapi, i=0,1,2,...
和 pure
来表示 (<*>)
:fmap0 :: a -> f a
fmap0 = pure
fmap1 :: (a -> b) -> f a -> f b
fmap1 g x = pure g <*> x
fmap2 :: (a -> b -> c) -> f a -> f b -> f c
fmap2 g x y = pure g <*> x <*> y
fmap3 :: (a -> b -> c -> d) -> f a -> f b -> f c -> f d
fmap3 g x y z = pure g <*> x <*> y <*> z
在应用中,如何用
<*>
表示 fmap_i, i=0,1,2,...
?谢谢。
另见 Is the implementation of `<*>` based on `fmap` special to Maybe applicative or can it be generalized to other applicatives?
最佳答案
你可以写:
(<*>) = fmap2 ($)
或者,如果你觉得它不那么晦涩:
f <*> a = fmap2 apply f a
where apply g x = g x
关于haskell - 在应用中,如何用 `<*>` 表示 `fmap_i, i=0,1,2,...` ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57188385/