関数型言語のモナド (4)
関数型言語のモナド (3) のプログラム Test1.hs にあった Student や Teacher に、将来なんらかの情報が付加される場合について考えてみましょう。
付加される情報が、String であるのか Int であるのか、はたまた日付のような情報か、現時点では分からない状況であるものとします。
もし、付加される情報が必ず String と決まっているなら、以下のようにすることもできます。
-- 変更前
data SchoolRoster =
Student String Int Int
| Teacher String String
-- 変更後
data SchoolRoster =
Student String Int Int String
| Teacher String String String
しかし、何が付加されるのか分からない場合、以下のようにします。
-- 型構築子 SchoolRoster の後ろに記号が付加されることに注目してください。
data SchoolRoster a =
Student String Int Int a
| Teacher String String a
何が付加されるのか分からないので、とりあえず a と表現しておくのです。 もちろん a を使わずに、b を使っても x を使っても問題ありません。
このように、型構築子 の後ろに何かを書いた場合、それは 型変数 として扱われます。
今は、型変数が1つの場合を書いていますが、型変数は2つあってもいいですし、値構築子ごとに使用する型変数が異なっても構いません。
例えば、以下のように Student の方にのみ情報を付加するようにしても構いません。
-- Teacher の方には 型変数 a を付けないようにすることもできます。
data SchoolRoster a =
Student String Int Int a
| Teacher String String
そして、もし付加される情報が Int と決まった場合には、SchoolRoster Int 型と呼ばれることになります。
付加された情報が String と決まれば、SchoolRoster String 型と呼ばれることになります。
この 型変数がモナドにおいて重要な役割を果たすことになる のですが、それは次章で触れることにしましょう。
この記事が気に入ったらサポートをしてみませんか?