全4935文字
PR

 一つは関数を説明するドキュメンテーションの役割です。型が実行時に決まる動的型付け言語では、ライブラリのドキュメントに引数が取るべき型が書いてあることが多い。であれば、Haskellのように最初から言語として型を厳密に記述するフォーマットが決まっていて、そのフォーマットに従って型のドキュメントを書くほうがよいでしょう。型が共通言語になるのです。実際に、Haskellプログラマー同士が会話するときは、関数の仕様を型で説明します。

 もう一つは型レベルのテストという役割です。プログラムの静的解析に近いイメージです。

 多相的な関数があり、文字列もオブジェクトも受け取れるとします。動的言語でテストを書こうすると、漏れが出ないようにきっちりとテストを書かなければなりません。特に引数でオブジェクトを取る場合は、動的言語だとテストが間違って通ってしまう場合もあります。

 一方、強い静的型付けでは、型が動的言語の型と比べてより厳密です。引数や返り値がどの型を取るかが厳密に決まっており、実装したプログラムがそれに合っていない場合はコンパイラがエラーを出してくれます。引数でオブジェクトを取る場合でも、型が合っているかどうかコンパイル時にきちんと検証してくれます。

 Haskellには暗黙の型キャスト(型の変換)もありません。暗黙の型キャストがある言語では、数の足し算をしようとして誤って文字の連結になってしまうといったことがしばしば起こります。Haskellではこのようなことはありません。

 日本Haskellユーザーグループ(Haskell-jp)という日本のHaskellコミュニティがあるのですが、初期には私も貢献しました。コミュニティの立ち上げやWebサイトを作るといった支援です。Haskellの言語自体に魅力を感じる人は、こうしたことにはあまり興味がありません。そこは自分が力を発揮できるところです。

WebフロントエンドにはElmが最適

 現在の仕事では、HaskellのほかにElmという関数型言語も使っています。ElmはAltJS(JavaScriptの代替言語)の一つですが、ほかのAltJSと違ってフレームワークを内包しているのが特徴です。The Elm Architecture(TEA)というWebフロントエンドフレームワークです。むしろ、Elmはそのフレームワークに適した言語として開発されたと言えるかもしれません。

 関数型のAltJSには、ほかにPureScriptやGHCJSなどもあります。これらは、Haskellに似たプログラムをどうやってJavaScriptとして動作させるかを目的として作られています。一方、Elmはどうやって高品質なWebフロントエンドを作るかが出発点です。それを実現するフレームワークを利用するために関数型言語のElmが用意されています。一般的なWebサービスを作るなら、個人的には圧倒的にElmが適していると思っています。

 Elmは思想も面白い。ボイラープレートコード(決まりきった定型コード)を減らすにはメタプログラミングが有効ですが、言語として複雑になるため、Elmはあえてメタプログラミングを採用していません。言語がバージョンアップするたびに、むしろ言語機能は減っています。Elmの作者であるEvan Czaplicki氏が新しいバージョンの仕様を発表すると最初はみんな驚くのですが、数カ月後には「Evanは正しかった」とそろって口にします。

 日本でもElmを広めようと、最近、Elm-jpというコミュニティを作りました。最近の自分のコミュニティ活動はElmが中心です。「Discord」というもともとはゲーマー用のチャットツールで活動しています。elm-lang.jpというドメインを取ってWebサイトを作りました。もっとも、今は飼っているヤギのさくらちゃんの写真が貼ってあるだけですが。