3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

いなたつAdvent Calendar 2019

Day 15

型シノニムでString型に命を吹き込む

Last updated at Posted at 2019-12-15

はじめに

いなたつアドカレの十五日目の記事です。

Haskellいいぞって布教したいので簡単なところで魅力を感じてもらいたいので、、、

型シノニムってなんぞ

Haskellには型に別名シノニムをつけることができます。
型シノニムそのものには特になにもありませんが、型シノニムがあることで、String型に意味を与えられます。

実例

Char型の配列をString型として扱っている言語はよくあると思います。これをHaskell流に書くと以下のようになります。

type String = [Char]

これだけで、Char型配列にStringと言う名前を与えられます。
Stringという型はChar型の配列と同意義であることを定義しました。

String型に意味を持たせる

type FirstName = String -- 名前
type LastName = String -- 苗字
type FullName = (FirstName, LastName) -- 苗字,名前

人の名前は文字列なので、String型ですんr、しかしこれをString型と言ってしまうと味気がありません。同じString型でも、FirstNameって意味を持つString型ですよ、
って明示できると読みやすくて人間にやさしいですよね。

FullName型はつまるところString型とString型のタプルですね。。。

関数に適用する

では、先ほど作った型を関数に適用させていきます。

まずはString型を使った読みにくい例

toFullName :: String -> String -> (String, String)
toFullName firstName lastName = (firstName, LastName)

これでは引数のどちらが苗字でどちらが名前、そして返り値もどちらがどっちかよくわからないですね。

型シノニムを使って書き換えます、

toFullName :: FirstName -> LastName -> FullName
toFullName firstName lastName -> (firstName, lastName)

これだと型定義をみた瞬間に引数のじゅんばんが わかりますね!!
戻り値の中身の順番もFullNameの型を見ると順番がわかります。とても人間に優しいですね!!

おわりに

Haskellをすこれ

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?