类 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/

10-12 18:49