このモナドのチュートリアルを読んでいるときに、次の式を見つけました。
データ M a = 例外を発生させる | 返す
タイプ例外 = 文字列
Raise Exception と Return a で型変数と値の範囲として a が使われているとありますが、ここで M の使い方 (または意味) がわかりません。M がデータ型の場合、なぜ M a のように使用されるのですか?
このモナドのチュートリアルを読んでいるときに、次の式を見つけました。
データ M a = 例外を発生させる | 返す
タイプ例外 = 文字列
Raise Exception と Return a で型変数と値の範囲として a が使われているとありますが、ここで M の使い方 (または意味) がわかりません。M がデータ型の場合、なぜ M a のように使用されるのですか?
値コンストラクターと型コンストラクターを区別する必要があります。
Mはデータ型ではなく、データ型コンストラクターです。したがって、Type のデータ型を構築するには、Type のデータ型を取得するType のデータ型であるM aType コンストラクターを指定します。たとえば、データ型または.MaM aM IntM String
一方Raise、Returnここでは値コンストラクターです。したがって、型の値を取得するにはM Int、値コンストラクターReturnに TypeIntのような値を入力するとしますReturn 2。
これには素晴らしい理論があります。値コンストラクターと型コンストラクターの詳細については、こちらを参照してください。
Mは定義されている型コンストラクターの名前であり、aこのコンストラクターの型パラメーターです。後でデータ型を使用するには、コンストラクターを指定し、M型引数を指定する必要があります。aM Int