りんごがでている

何か役に立つことを書きます

スタート Haskell 第5回

スタートHaskell第5回(http://atnd.org/events/22289)参加してきましたのでメモなどを。


概要

発表

今回はプログラミングHaskellの10章と11章のお話+山本和彦(@kazu_yamamoto)さんのモナドチュートリアル

その後

後半の実習と懇談会は予定があって参加できなかったけれども次回は是非参加したい。


詳細

10章 型とクラス

@ruiccさんの発表 http://www.slideshare.net/RuiccRail/programming-haskell-chapter10
型とクラスに関して、オブジェクト指向Javaと関数型のHaskellの違いや類似点を見ていこうというお話
Haskellの型の分類

  • 直和構造
    • タプル
    • ベクトル/行列
  • 直積構造
    • Bool
  • 再帰構造
    • Tree
    • List

なるほどなるほど。
こういった型はやはりHaskellの方が簡潔な表記で作りやすい印象
ユーザー定義の型と組み込みが区別なく使えるので便利ですね

その他、(多重)継承など
この辺でなかなか議論がカオスになって行く
Haskellのclassとは何なのか?
Twitter上ではJavaのインターフェースに対応するという認識が一般的
Haskellのclassって幾つかの型に対して何か共通の性質を持たせたい時の制約
と考えてたら良いんでないかね。なかなか類推が難しい領域

そのへんオブジェクト指向と関数型の型の世界に関しては
「記号と再帰」(著:田中久美子)とか参考に考えていきたい

11章 切符番号遊び

@dekosukeさんの発表 http://www.slideshare.net/dekosuke/programming-haskell-chapter-11
なかなか奥深い話だからプログラミングHaskellを読み合わせて理解していきたい
11章サボっててすいません(´;ω;`)

モナドチュートリアル

@kazu_yamamotoaさんの発表 http://mew.org/~kazu/monad.pdf
題して「モナモナ言わないモナド入門」
前回までのスタートHaskellでは名前さえ言ってはいけなかった "Monad" さま
そもそもなぜモナドを理解出来ないのかというお話から

だって、モナド抽象的だから
モナドが理解出来ないのはそもそもモナドが抽象的な概念であって、直接的にその概念をうかがい知ることはできないよね

大統一理論のアナロジー」:
大統一理論は4つの具体的な力から重力を除いたものを抽象しようとするもの
それ単独で必要性や概念を理解することは難しい
モナドも同様に幾つかの具体的な概念を抽象する概念なのでそのまま理解することは難しい

だから具体例から見てみようという流れ

資料を見たほうがよく分かるかと

  • 状態系
    • Parser
    • IO
  • 失敗系
    • List
    • Maybe
  • その他いろいろ

これらをすべて抽象するんだからモナドはとっても抽象的なのはわかる
あとは色々と具体例

そして後半はモナドに関する力の階層の問題

強い順に

  • プログラミング可能コンテナ Monad (>>=)
  • 逐次コンテナ Applicative (<*>, return)
  • マップ可能コンテナ Functor (<$>)

そして強いものは可能な限り使用を避ける方がいいので
do記法は避けていこうというお話

そうして「抽象の壁」を突破し、僕らはモナドマスターとなったのであった(え?)

今後モナドをガンガン使って行きましょうね