在Haskell中,monads根據函數返回和綁定來定義,其中返回的類型爲a -> m a
,綁定的類型爲m a -> (a -> m b) -> m b
。之前已經指出monads can also be defined in terms of return and join,其中連接是m (m a) -> m a
類型的函數。綁定可以根據連接來定義,但是可能相反嗎?可以根據綁定來定義連接嗎?隨着單子,可以加入定義的綁定?
沒有加入,我不知道我會做什麼,如果我曾經以某種方式得到了一個「兩次包裹」monadic值m (m a)
- 沒有一個函子或monad操作「刪除任何圖層」,可以這麼說。如果這是不可能的,爲什麼Haskell和其他monad實現在綁定方面定義它們?它似乎嚴格地比基於連接的定義更有用。
注「也」:如果加入不能在綁定來定義,這將_have_是Monad'的'成員(或不會爲所有monad定義),而不是。 –