[英]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.