あるとき、私は思った―― 「Getter、Setterと、状態を次に進める関数を持つ何かがほしい!そうすればゲームやユーザーインターフェイスなどがとても書きやすくなるのに……!」 私はそれをカラクリと名付けた。存在するかどうかわからない理想の構造を求めて… オブジェクトの型をKとしよう。型A, Bに対するGetterが存在するならば、以下の関数が存在することになる。 getA :: K -> A getB :: K -> B ここで積の性質を思い出そう。K -> (A, B)があればgetA、getBは自明だ。つまり、Getterは一つで十分ということになる。次に、X, YのSetterを考えよう。 setX :: X -> K -> K setY :: Y -> K -> K 和の性質により、Either X Y -> K -> Kが存在すれば、setX, setYの定義は自明になるので