首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“Data.Traversable”中“fmapDefault”的意思是什么?

“Data.Traversable”中“fmapDefault”的意思是什么?
EN

Stack Overflow用户
提问于 2015-07-05 11:00:12
回答 1查看 164关注 0票数 8

我正在查看Data.Traversable的文档,并偶然发现了fmapDefault - https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base/Data-Traversable.html#g:3

代码语言:javascript
复制
fmapDefault :: Traversable t => (a -> b) -> t a -> t b

文件中说-

该函数可用作函子实例中fmap的值,条件是定义遍历。

因此,可以推测它可以用于派生Traversable实例的一个Traversable。然而,TraversableFunctor作为超类。

代码语言:javascript
复制
class (Functor t, Foldable t) => Traversable t where
    ...

因此,如果不首先定义Traversable实例,就不能定义Functor实例!而且,无论哪里有Traversable,都可以访问fmap,这相当于(可能比fmapDefault更高效)。

那么,人们会在哪里使用fmapDefault,而不是更熟悉的fmap呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-05 11:11:33

它允许你写

代码语言:javascript
复制
data Foo a = ...

instance Functor Foo where -- we do define the functor instance, but we “cheat”
  fmap = fmapDefault       -- by using `Traversable` in its implementation!

instance Traversable Foo where
  traverse = ...           -- only do this manually.

尽管如此,我不认为这真的是明智的。函子实例通常是徒手完成的,而且显而易见的实现可能比Traversable派生的实现更有效。通常,实例实际上可以自动创建:

代码语言:javascript
复制
{-# LANGUAGE DeriveFunctor #-}

data Foo a = ...
       deriving (Functor)
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31229674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档