我有以下代码行:
fmap (*2) (*11) 3
在此示例中,我试图理解我的函子是什么,因为当我检查类型时,会得到以下信息:
Prelude> :t fmap (*2) (*11) 3
fmap (*2) (*11) 3 :: Num b => b
而且我看不到任何类似函子的东西。如果我执行部分应用程序(删除3的调用称为?),则会得到以下信息:
Prelude> :t fmap (*2) (*11)
fmap (*2) (*11) :: Num a => a -> a
而且我仍然看不到任何看起来像函子的东西。
我在这里想念什么吗?
所讨论的函子是函数函子。函数函子定义为
instance Functor ((->) a) where
fmap f g = f . g
在哪里(->) a b ~ a -> b
,只需将->
运算符转换为中缀形式。所以这段代码简化为
(*2) . (*11) $ 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句