
- Haskell 教程
- Haskell - 主頁
- Haskell - 概覽
- Haskell - 環境設定
- Haskell - 基本資料模型
- Haskell - 基本運算子
- Haskell - 決策
- Haskell - 型別和型別類
- Haskell - 函式
- Haskell - 函式的更多內容
- Haskell - 函式組合
- Haskell - 模組
- Haskell - 輸入和輸出
- Haskell - 函子
- Haskell - 單子
- Haskell - 拉鍊
- Haskell 有用資源
- Haskell - 快速指南
- Haskell - 有用資源
- Haskell - 討論
Haskell - 單子
單子不過是一種具有額外功能的應用函子型別。它是一種型別類,支配著被稱為單子規則的三個基本規則。
所有三個規則嚴格適用於一個如下所示的單子宣告:
class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b x >> y = x >>= \_ -> y fail :: String -> m a fail msg = error msg
適用於一個單子宣告的三條基本定律如下:
左同一律 - return 函式不改變值,它不應改變單子中的任何內容。它可以表示為“return >=> mf = mf”。
右同一律 - return 函式不改變值,它不應改變單子中的任何內容。它可以表示為“mf >=> return = mf”。
結合律 - 根據此定律,函子和單子例項都應以相同的方式工作。它可以用數學表示式“(f >==>g)>=> h =f >= >(g >=h)”表示。
前兩條定律重複了同一觀點,即在 bind 運算子的兩側,return 應具有恆等行為。
在以前面的示例中,我們已經使用了大量單子,而沒有意識到它們是單子。考慮採用列表單子生成特定列表的以下示例。
main = do print([1..10] >>= (\x -> if odd x then [x*2] else []))
此程式碼將產生以下輸出:
[2,6,10,14,18]
廣告