君の手で作るモナドは怖くない rejected

Abstract

本セッションの目的は、ずばり モナド (monad) に対する 初心者の心理的障壁を取り除くこと です。モナドはプログラミング言語 Haskell と関連して言及されることが多く、世間では何か得体のしれない難解な概念だというイメージが先行しています。しかし、実際にはどのプログラミング言語にもある「処理」の概念を一般化しただけで、プログラマにとっては顔見知りの相手に過ぎません。

本セッションでは、実際の使用場面から逆算してモナドを再発明することでその必然性を体感し、必要以上に強調された神秘性を引きはがすことを目標とします。受講後には、セッション内で扱わなかった Haskell の基本文法を少し補うことで、モナドを利用した単純なプログラムならすぐに書けるようになるでしょう。

そもそも、なぜモナドや、それを用いる Haskell にはこんなにも怖ろしげなイメージが先行しているのでしょうか? 申請者が考えるに、この原因は二点に集約されます。

  • 普段使いのプログラミング言語とは完全に異質な概念であるかのように見えること
  • 定義が天下りに与えれられることが多く、その必然性がよくわからないこと

モナドが理解できない(と本人が感じている)初心者にとって「モナドって結局何なのさ?」という疑問は非常によく見られるものです。この疑問に対し、本セッションの主張は、以下の一文に集約されます。

「モナドとは何か?」という問い自体がナンセンスである

すなわち、我々が「哺乳類」という生き物を飼うことができないように、モナドはかなり広い範囲の対象を「後付け」でグルーピングした便宜上の名前だと捉えたほうがよい、というのが申請者の意見です。博物学者になるのでないかぎり、ペットを飼うのに必要なのはあくまでも目の前にいる犬や猫の性格であって、哺乳類に共通する特徴ではありません。

本セッションではこの考え方に基づき、あくまでも具体例な使用場面に基づいてモナドの使い方を解説します。この際、先に挙げた二つの問題点それぞれに対抗するため、以下の原則を置きます。

  • よく知っているプログラミング言語と地続きの概念であることを示すこと
  • 実装したい処理にとって必要な性質をボトムアップで考えること

より具体的には、モナドが登場するいくつかの典型的な場面を題材として、まず目指す処理を一般的な手続き型言語により実装します。その後、同様の効果を Haskell で実現するとしたらどのような形が適切かを発見的に考察し、最終的には Haskell におけるモナドの再実装に至るという流れを取ります。

なお、本セッションは初心者を対象にしており、Haskell に関する知識や経験は仮定しません。説明に必要な Haskell 特有の事項は講演の前半部分で解説します。ただし、関数の型について議論する場面が多々生じるため、Java や Scala、あるいは Go など何らかの静的型付き言語に触れた経験があった方がよいと思います。

Session Information
Starts On N/A
Room
Session Duration 50 min session
Spoken Language Japanese
Interpretation Unavailable
Slide Language Japanese