这个例子中的算子是什么?

时间:2015-04-23 14:54:48

标签: haskell functor

我有以下代码行:

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

我仍然没有看到任何看起来像仿函数的东西。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:9)

有问题的仿函数是函数仿函数。函数仿函数定义为

instance Functor ((->) a) where
    fmap f g = f . g

(->) a b ~ a -> b,只需将->运算符设置为中缀形式即可。所以这段代码简化为

(*2) . (*11) $ 3