![](/img/trans.png)
[英]What is the difference between `let .. in do` and `<-` notation in 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.