2017-06-20 72 views
2

我想了解拉姆達文檔,所以我查了一下函子是什麼here,但是這個意思是什麼~>函子解釋中的〜>是什麼?

map :: Functor f => f a ~> (a -> b) -> f b 
+0

有一個簡短的答案在https://stackoverflow.com/questions/43435656,以及更多的細節在https://stackoverflow.com/questions/40361059。 –

回答

2

它已經寫有:

類型簽名符號

〜>(波浪箭頭)方法類型構造。當一個函數是一個Object的 屬性時,它被稱爲一個方法。所有方法都有一個隱含參數類型 - 它們是屬性的類型。 a〜> a - > a是類型a的對象上的方法滿足的類型,它將類型a作爲參數並返回類型a的值。

+0

如果第一個'f'是一個函數,'a'和'b'前面的'f'是什麼? – stackjlei

+0

最初的位('Functor f =>')是定義的剩餘部分的約束。 'f'可以表示任何Functor類型,例如列表(真正的數組):'map :: [a]〜>(a - > b) - > [b]',(請注意,因爲列表很常見, 'Array x'的簡寫形式:'[x]'。)或者可能:'map:也許a〜>(a - > b) - >也許b'。或未來:'map :: Future a〜>(a - > b) - > Future b'。拉姆達的版本不處理*方法*,只處理*函數*,所以這些改變了一些,例如, 'map ::(a - > b) - > [a] - > [b]'。但其原理相同。 –

+1

所有'f's表示相同類型的構造函數(或參數化類型)。 f的第一次出現只是說類型構造函數f有一個函子約束,即'f'的實例必須定義一個合適的'map'操作。可能讓你感到困惑的是,給定的類型簽名只是註釋了這個'map'操作的通用版本。所以'f'的實例需要一個'map'操作,'map'本身需要一個'f'的實例作爲它的第二個參數。 – ftor