在the chain
documentation你會發現:underscore.js中的鏈函數是否創建了monad?
調用包裝的對象上
chain
將使所有未來的方法調用 返回裹物爲好。當您完成 計算時,請使用value
檢索最終值。
那麼chain
函數是否創建了monad?
在the chain
documentation你會發現:underscore.js中的鏈函數是否創建了monad?
調用包裝的對象上
chain
將使所有未來的方法調用 返回裹物爲好。當您完成 計算時,請使用value
檢索最終值。
那麼chain
函數是否創建了monad?
不,不是一個單子,而是一個共同體!它變成一個函數,它接受一個包裝對象並將一個普通值返回到一個函數中,該函數將獲取並返回一個包裝對象。作爲Haskell的類型簽名,這將是:
(Wrapped a -> b) -> (Wrapped a -> Wrapped b)
的value
類型簽名是:
Wrapped a -> a
這些正是你所需要的comonad。第一個功能通常稱爲extend
,第二個功能爲extract
。
您可以將一個comonad視爲具有一些額外上下文的值。這當然正是chain
所做的。
查看this Stackoverflow question瞭解更多關於comonads的信息。
我喜歡這個答案;如果你要解釋下劃線對象方法到類型上的映射,我認爲它會更直接地顯示你的意思。如果我理解正確,方法通常是'包裝a - > b's,但'鏈接'返回一個對象,其方法(除了'value')都是'Wrapped a - > Wrapped b''。我知道一點Haskell,但這個問題最初並沒有標記爲Haskell,所以如何解釋你的答案如何映射到JS庫可能會有所幫助。 – ellisbben
我已經標記了這個haskell,因爲haskellers可能有話要說這個話題。 – Marcin