簡體   English   中英

Haskell monads:`(>> =)`和`(= <<)`的名稱是什么?

[英]Haskell monads: What is the name for what `(>>=)` and `(=<<)` do?

我已經和Haskell一起玩了好幾年了; 我對monad如何工作以及如何使用它們以及運算符(=<<)(>>=)作用感到很滿意。

但我還是不知道如何談論它們! 對於它們的作用是否有任何標准術語 - 對於將箭頭a -> mb轉換為箭頭ma -> mb

(作為背景的數學家,腦海中浮現的一個選項是“來自Kleisli類別的遺忘函子”。但是Haskell大師肯定會有一些更簡潔的術語,因為在Haskell中,這個操作被用作其中一個構建塊。 monads,與通常被認為是派生操作的數學設置不同,從乘法和functoriality定義!)

>>=的正式名稱是bind。 我們還可以將其視為“直通”,“處理方式”等。 來自MSDN頻道9的Brian Benkman將其稱為“推”(向右或向左)。

為何綁定? let類比。 正如let將變量綁定到評估初始表達式的結果一樣,“monadic let”會將其變量“綁定”到其輸入計算的結果:

let a = ....      or:      .... $>> (\ a ->      -- non-recursive "let", as in Lisp,
    b = ....               .... $>> (\ b ->      --    (Haskell's is Lisp's "letrec")
in  ....                   .... ))             where x $>> f = f x


do a <- ....      or:      .... >>= (\ a ->
   b <- ....               .... >>= (\ b ->
   ....                    .... ))

正如您所看到的,這是完全非數學的,實用的觀點。

暫無
暫無

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

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