我有以下代码行:
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
我仍然没有看到任何看起来像仿函数的东西。
我在这里错过了什么吗?
答案 0 :(得分:9)
有问题的仿函数是函数仿函数。函数仿函数定义为
instance Functor ((->) a) where
fmap f g = f . g
(->) a b ~ a -> b
,只需将->
运算符设置为中缀形式即可。所以这段代码简化为
(*2) . (*11) $ 3