Haskell で Hello World! しようとしたらモナドでドナドナした

    <file:./>../img/IMG_3895.JPG

    はじめに

    最近発売された, Haskell 本を買ってみた.

    どんな言語でも, はじめは Hello, World を出力するところからはじめる.

    Haskell で Hello, World をするためには, ノマドというものを理解しない といけない. この本では p267 に書いてある. なんと険しき Hello, World…

    モナドとは

    とりあえず理解したことを自分の言葉でメモ. あまりわかっていない. モナドとノマドとドナドナの違いがわからない.

    モナドとは, 純粋関数と副作用を共存さ競るためのしくみ.

    純粋関数

    同じ引数を渡す限り, どのような順番で何度呼んでも同じ結果が返るような関数.

    副作用

    ある機能がコンピュータの (論理的な) 状態を変化させ, それ以降で得られる結果に影響を与えること.

    • 状態を参照することで出力が変化すること
    • 状態に変化を与えることで出力が変化すること

    例としては,

    • 破壊的代入
    • I/O 制御 (write/print 等)

    wikipedia

    ちなみに, wikipedia は,

    プログラムとはクライスリ圏の射である , という要請から合成規則としてクライスリトリプル (Kleisli triple) というモナドと等価なものが用いられる.

    ショボーン. 線形代数の単位を落としたオレをなめるなよ!

    不条理な世の中と清められた世界

    そう, Hello, World とは純粋で汚れのない pure な世界を汚す副作用.

    そして, 純粋関数で構築されたプログラムは, 論理で構築された絶対的な世界!

    絶対的な真理として存在する数学や音楽の秩序が美しさを持つように, 純粋関数によって構築された秩序は, それ自体が美しいのだ!

    Hello, World!

    コードを以下に示す.

    main :: IO ()
    main = putStrLn "Hello, World!"

    IO という部分は, IO モナドと呼ばれる.

    putStrLn は String を受け取り, IO を返す.

    Prelude> :t putStrLn
    putStrLn :: String -> IO ()

    Bookmarks

    Ruby での解説:

    Haskell におけるモナドの解説ページ: