(<*) 和 (*>) 的定义
The definition for (<*) and (*>)
我可以假设以下内容适用于所有应用程序吗?
f1 <* f2 = fmap const f1 <*> f2
和
f1 *> f2 = fmap (flip const ) f1 <*> f2
是的。来自 the documentation for Applicative
:
The other methods have the following default definitions, which may be overridden with equivalent specialized implementations:
u *> v = (id <$ u) <*> v
u <* v = liftA2 const u v
那里的关键词是“等效”。由于您的定义等同于那些*,因此它们也必须等同于所有合法应用程序的定义。
*如果您不相信您的定义等同于那些定义,这里有一些提示:
fmap f x = f <$> x
liftA2 f x y = f <$> x <*> y
flip const = const id
x <$ m = const x <$> m
我可以假设以下内容适用于所有应用程序吗?
f1 <* f2 = fmap const f1 <*> f2
和
f1 *> f2 = fmap (flip const ) f1 <*> f2
是的。来自 the documentation for Applicative
:
The other methods have the following default definitions, which may be overridden with equivalent specialized implementations:
u *> v = (id <$ u) <*> v
u <* v = liftA2 const u v
那里的关键词是“等效”。由于您的定义等同于那些*,因此它们也必须等同于所有合法应用程序的定义。
*如果您不相信您的定义等同于那些定义,这里有一些提示:
fmap f x = f <$> x
liftA2 f x y = f <$> x <*> y
flip const = const id
x <$ m = const x <$> m