型シノニムの話
[Charl] と String は同値でこれは型シノニムを使って実装されている。型シノニムはある方に別の名前を与えて、コードやドキュメントを読みやすくする。
このように書く
type String = [Char]
この型宣言と
toUpperString :: [Char] -> [Char]
この型宣言は同じ
toUpperString :: String -> String
後者の方が読みやすい
電話帳のリストの型シノニム
これを
phoneBook :: [(String, String)] phoneBook = [("betty", "555-2938") ,("bonnie1", "334-8878") ,("bonnie1", "334-8877") ,("bonnie1", "334-8876") ,("bonnie1", "334-8875") ,("bonnie2", "334-8878") ,("bonnie3", "334-8878") ,("bonnie3", "335-8878") ,("bonnie4", "334-8878") ]
こう
type PhoneNumber = String type Name = String type PhoneBook = [(Name, PhoneNumber)] phoneBook :: PhoneBook phoneBook = [("betty", "555-2938") ,("bonnie1", "334-8878") ,("bonnie1", "334-8877") ,("bonnie1", "334-8876") ,("bonnie1", "334-8875") ,("bonnie2", "334-8878") ,("bonnie3", "334-8878") ,("bonnie3", "335-8878") ,("bonnie4", "334-8878") ] inPhoneBook :: Name -> PhoneNumber -> PhoneBook -> Bool inPhoneBook name pnumber pbook = (name, pnumber) `elem` pbook
実行結果
*Main> inPhoneBook "betty" "555-2938" phoneBook True
型宣言の表現力が上がるが、型シノニムの使いすぎは良くないらしい。型シノニムを使う場面としては、
- 自作の関数内で既存の型が何を表しているか示す場合
- 長々しい型
[(String, String)] のような
が自作の関数の文脈で何か特定のものを表現している場合
所感
エイリアスみたいなものか。それにしても7章が長い...

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る