我正在查看文档Data.Traversable
并遇到了fmapDefault
- https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base/Data-Traversable.html#g:3
fmapDefault :: Traversable t => (a -> b) -> t a -> t b
该文件指出 -
如果定义了 traverse,则此函数可以用作 Functor 实例中 fmap 的值。
所以大概它可以用来导出fmap
一个Traversable
实例。然而,Traversable
作为Functor
一个超类。
class (Functor t, Foldable t) => Traversable t where
...
所以你不能在不先定义Traversable
实例的情况下定义Functor
实例!并且无论你有一个Traversable
,你都可以访问一个fmap
,这相当于(并且可能比更有效)fmapDefault
。
那么将在哪里使用fmapDefault
,而不是更熟悉fmap
?