Haskell 的な MonadRuby で再現したものを書こうとして,書いた.とある向きへの解説のためだ.書くだけは書いたが,型情報をメソッドの上にコメントに記載する方式ではやはりプログラムとしての見通しが悪い.なにより,この手の演算について本質的な型に関する情報が,明示的に宣言されずに(仕方なく)暗黙的な変換にとどまるというのは,説明の観点からもよくない.ということで,Ruby-like なシンタックスを持つ Crystal で書き直すことになった.

Crystal は LLVM 上に実装されたクラスベースのコンパイラ言語で,ちょっとドキュメントを見ればわかるが,シンタックス自体はほぼ,まんま Ruby だ.Ruby にはない型まわりのシンタックスは,僕の守備範囲内だと Scala に似ている.

ちょっと調べてみると Crystal の型システムの柔軟さと(良い意味の)奇妙さに惹かれてしまって,思わず説明の軸足がぶれかけた.これについては別途解説記事を書きたい.

Functor → Mappable

Monoid → Reducible

という対応がうまく表現できていたらいいなと思う.