2015-04-23 61 views
1

我有下面的代碼行:這個例子中的函子是什麼?

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 

,我仍然沒有看到任何看起來像有一個仿函數。

我在這裏錯過了什麼嗎?

回答

9

有問題的仿函數是函數仿函數。功能仿函數定義爲

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

(->) a b ~ a -> b,只是使->運營商進入綴形式。所以這段代碼簡化爲

(*2) . (*11) $ 3 
+0

太棒了,我沒有意識到一個函數也是函子! – jcm

相關問題