簡體   English   中英

沃德勒論文中令人困惑的地圖功能定義

[英]Confusing map function definition in Wadler's paper

有人可以幫我理解Wadler教授的原始論文《函數編程的Monads(Haskell)》中的映射定義。

map :: (a → b) →(M a →M b)     
map  f m =m >= λa.unit(f a)

我了解為什么將其聲明為從f :: a-> b到g :: Ma-> Mb的射態。 為什么將其混淆地定義為看似采用2個參數f和m。 m是我認為可以定義為數據或類型的計算(具有副作用的函數)。

第二個參數是返回函數的第一個參數:

map : (a -> b) -> m a -> m b
map = \(f : a -> b) -> \(x : m a) ->
        x >>= (\a -> return (f a))

表格的定義

foo x y z = bar

等同於以下所有

foo x y = \z -> bar
foo x = \y z -> bar
foo = \x y z -> bar

因此,發布的代碼也可以寫成

map :: (a → b) → (M a → M b)     
map f = \m -> m >= \a -> unit (f a)
-- which is parsed as
-- map f = \m -> (m >= (\a -> (unit (f a))))

以上確實強調, map映射功能的功能,可以說是更清晰。 但是,它有點冗長,因此在Haskell中常見的是將參數盡可能地移到=的左側。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM