查看“Functor, Applicative 和 Monad”的源代码
←
Functor, Applicative 和 Monad
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
[[Category:Haskell]] == Functor == <code>Functor</code> 可被想象成 Mappable。 == Applicative == == Monad == === 相关函数 === ;<code>(>>=)</code>: bind ;<code>(>>)</code>: then 运算符。忽略上一个 Monad 的结果 ;<code>(>=>)</code>: monad 复合,<code>(bs >=> cs) a</code> 可理解为 {{code|haskell|do { b <- bs a; cs b }<nowiki/>}} ;<code>(<=<)</code>: <code>flip (>=>)</code>,就像 <code>(.)</code> 运算符<ref>[[wikibooks:Haskell/Understanding_monads#Monadic_composition]]</ref> == 关系 == <code>Monad</code> 是 <code>Applicative</code> 的 superclass,<code>Applicative</code> 是 <code>Functor</code> 的 superclass。 === 相关函数的关系 === 对于一个 <code>Monad</code>: * <code>liftM</code> 与 <code>fmap</code> 可互换 * <code>ap</code> 与 <code>(<*>)</code> 可互换 * <code>return</code> 与 <code>pure</code> 可互换 == 运用 == 需要给一个类型实现 <code>Monad</code> 时,应从 <code>Functor</code> 开始实现,再实现 <code>Applicative</code> 和 <code>Monad</code>。如下 <syntaxhighlight lang=haskell> instance Functor Foo where fmap = -- etc. instance Applicative Foo where pure = -- etc. (<*>) = -- etc. instance Monad Foo where (>>=) = -- etc. </syntaxhighlight> 但由于 <code>return</code> 是 <code>Monad</code> 版本的 <code>pure</code>,<code>ap</code> 是 <code>Monad</code> 版本的 <code>(<*>)</code>,为了方便也可如下实现<ref>[[wikibooks:Haskell/Understanding_monads#liftM_and_Friends]]</ref> <syntaxhighlight lang=haskell> instance Monad Foo where return = -- etc. (>>=) = -- etc. instance Applicative Foo where pure = return (<*>) = ap instance Functor Foo where fmap = liftM </syntaxhighlight> == 参考资料 == <references />
该页面使用的模板:
模板:Code
(
查看源代码
)
返回至
Functor, Applicative 和 Monad
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息