Haskellのお勉強 その17
type宣言
type宣言を使うと型に別名をつけることが出来る。例えば、type FilePath = String
と書くことで、String型の別名としてFilePath型が使えるようになる。
type宣言は型に別名をつけるだけで、型を作る方法が増えるわけではない。
つまり、新しいデータコンストラクタは導入されない。
また、type宣言でも型変数を使った宣言ができる。例えば、
type MyList a = [a]
と書くことで、[a]型の別名としてMyList型を宣言することができる。
newtype宣言
某機動戦士のアレを想起するが、アレのことではない。newtype宣言を使うと、既存の型をもとにして新しい型を宣言することができる。例えば、
newtype StackNT a = MkStackNT [a]
このように書くと、[a]型を元にStackNT a型を宣言し、
そのデータコンストラクタはMkStackNTである、と宣言していることになる。
newtype宣言がtype宣言と違うのは、型を作る方法が増えるという点。
つまり、新しいデータコンストラクタが導入されることである。
実は、newtype宣言は、同じことをdata宣言でも表現することができる。
data StackNT a = MkStackNT [a]
と表現することができる。ただし、newtype宣言はあくまで既存の型をもとに
新しい型を宣言するので、データコンストラクタのフィールドは1つに制限される。
そのため、複数フィールドがあるようなデータコンストラクタを持つdata宣言を
newtype宣言で書くことはできない。