2012-05-03 60 views

回答

38

不,不是一個單子,而是一個共同體!它變成一個函數,它接受一個包裝對象並將一個普通值返回到一個函數中,該函數將獲取並返回一個包裝對象。作爲Haskell的類型簽名,這將是:

(Wrapped a -> b) -> (Wrapped a -> Wrapped b) 

value類型簽名是:

Wrapped a -> a 

這些正是你所需要的comonad。第一個功能通常稱爲extend,第二個功能爲extract

您可以將一個comonad視爲具有一些額外上下文的值。這當然正是chain所做的。

查看this Stackoverflow question瞭解更多關於comonads的信息。

+8

我喜歡這個答案;如果你要解釋下劃線對象方法到類型上的映射,我認爲它會更直接地顯示你的意思。如果我理解正確,方法通常是'包裝a - > b's,但'鏈接'返回一個對象,其方法(除了'value')都是'Wrapped a - > Wrapped b''。我知道一點Haskell,但這個問題最初並沒有標記爲Haskell,所以如何解釋你的答案如何映射到JS庫可能會有所幫助。 – ellisbben

相關問題