いう型の関数だと考えることもできます。値コンストラクタですが、こちらには引数がありません。いう型の関数だと考えることもできます。何もないことを表すのに、ずいぶん大げさだと感じるかもしれません。これはまだ、話の半分に過ぎません。これを使って、ファイル名から拡張子を見つけてみましょう。格納された値を取り出すための唯一の方法なのです。とき、プログラマであるあなたが、このケースに対処しなければならないことを意味します。メソッドの中に埋め込まれていたのです。場合分けを抽象化します。エルゴノミックにしています。合成可能ではない、つまり、陶器店の中の雄牛だということです。どのように使うかを見ました。あるわけではなく、拡張子のないファイル名もあり得ます。使うことによって、型の中にエンコードされています。コンパイラは、拡張子が存在しない可能性に対処することを、私たちに強制してくるわけです。今回は単に、そうなったことを告げるメッセージを表示するようにしました。ファイル名から拡張子を取り出すことは一般的な操作ですので、それを関数にすることは理にかなっています。与えられたファイル名の拡張子を返す。続く、全ての文字である。与えられたファイル名の拡張子を返す。続く、全ての文字である。型が不在の可能性について考慮することを強制していることです。コンパイラが私たちに、ファイル名が拡張子を持たないケースを、うっかり忘れないようにしてくれるからです。したような明示的な場合分けを毎回続けるのは、なかなか面倒です。適用に当てはめられます。返し、そうでなけれは、オプションの中の値に関数を適用する、というパターンです。メソッドとして定義されています。メソッドなので、少し違うシグネチャを持っています。与えられたファイル名の拡張子を返す。続く、全ての文字である。与えられたファイル名の拡張子を返す。続く、全ての文字である。ときのデフォルト値を与えることです。みなすようなプログラムを書きたくなるかもしれません。ご想像の通り、このような場合分けはファイルの拡張子に特有のものではありません。同じように、標準ライブラリの実装はただの関数ではなくメソッドになっています。入れる値と同じ型になるよう、デフォルト値の型を制限していることです。いま定義したフリースタンディングな関数の代わりに、そちらを使いましょう。)もうひとつ特筆すべきコンビネータがあります。考慮しながら、別々の処理を簡単に組み合わせることができます。この節のほとんどのコードは、与えられたファイル名について拡張子を見つけだします。取り出したファイル名が必要です。がというわけではありません。拡張子を見つけ出せるか、トライしなければなりません。コンビネータを使えばいいと思うかもしれませんが、型にうまく適合しません。返すのでコンパイルエラーとなるのです。