2012-09-07 24 views
5

所以我覺得Lambda表達式作爲證明了解您Haskell的:困惑這個使用lambda的

(filter (\xs -> length xs > 15) (map chain [1..100])) 

的輸入XS是0​​ 這是很容易讀取生成的列表。

所以這裏是我感到困惑的地方,看着一些真實世界代碼(tm)。

下面是 conduit

fmap f (ResourceT m) = ResourceT $ \r -> fmap f (m r) 

一個功能位置是從r來輸入?

回答

12

r在實際調用功能\r -> fmap f (m r)之前不會有值。在fmap的定義中,該函數從未被調用 - 它只存儲在ResourceT中。然後可以從ResourceT中取出並呼叫。這是r將獲得價值。

6

\r -> fmap f (m r)是作爲closure的一例的功能。變量fm是函數將要執行的環境的一部分。另外,因爲Haskell是一個函數式語言,函數可以在沒有被評估或被部分評估的情況下被傳遞,就像在這種情況下一樣。

+2

如果我可以選擇兩個答案,我會的。無論如何Upvote。 –