みんなの知らない型の世界
型クラス基礎編
自己紹介
名前
- 五十嵐 雄 (Twitter: @yu_i9 / GitHub: @yu-i9)
所属
- 京大情報学科計算機科学コース3回生
- CAMPHOR- 副代表
興味
- 型システム
型クラス?
- 共通の性質を持った型を分類する仕組み
- その性質はメンバ関数で表現される
- ひとことで言うと関数オーバーロードの仕組み
- ある型についてメンバ関数の具体的な実装を与えることで「インスタンス化」できる
- 実装されている言語としてはHaskellが有名
何を言っているんだ…
例を見ると分かる!
Show 型クラス
class Show a where
show :: a -> String
共通の性質は「String へ変換できる」こと
その性質を表す関数は「show」
Show 型クラスのインスタンス
class Show a where
show :: a -> String
instance Show String where
show :: String -> String
show = id
> show "Type Class" --> "Type Class"
メンバ関数を具体的に実装することで
StringがShow型クラスに属する証拠を与える
Show 型クラスのインスタンス2
class Show a where
show :: a -> String
instance Show String where
show = id
instance (Show a) => Show [a] where
show [] = ""
show [x] = show x
show (x:xs) = show x ++ ", " ++ show xs
> show ["Hello", "World"] --> "Hello, World"
Show型クラスの性質を再帰的に表現できる
Exercise
型 (a, b) を Show 型クラスの
インスタンスにせよ
Show 型クラスのインスタンス3
instance (Show a, Show b) => Show (a, b) where
show (x, y) = "(" ++ show x ++ ", " ++ show y ++ ")"
> show ("hoge", "fuga") --> "(hoge, fuga)"
改めて型クラス
- 共通の性質を持った型を分類する仕組み
- その性質はメンバ関数で表現される
- ひとことで言うと関数オーバーロードの仕組み
質疑応答
TypeClassBasic
By Yuu Igarashi
TypeClassBasic
- 1,964