10
9

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.

型コンストラクタの意味

Last updated at Posted at 2015-02-11

学習の素材は、
関数プログラミング実践入門

この表記は、私見・感想です。

型コンストラクタ

モナドを学習している最中だが、どうもこのキーワードの意味をしっかりと理解していないと、コードを読み辛いことに気づいた。

言葉の理解

型コンストラクタとは、 それ自体が型であるが、別の型をくっつけて新たな型を作るものである。
[] は、型一つを包んでリストになる リストの型コンストラクタ であり、型 (,) は型二つを包んでタプルになる タプルの型コンストラクタ である。
同じように、 型 Either は型二つを包んで Either a b を作る Either の型コンストラクタ である。

一方、値としての [] は空リスト、値としての (,) はタプルのコンストラクタであることに注意する。

OOPのコーディング形式が頭から離れず、例えば State state a と書いてあっても State state aである とすぐに脳内変換できない。なんとなくstatea にはState の実体が参照されるような気がしてしまい、ノイズになる。

型クラス モナドのインスタンスになる条件

型クラス モナドのインスタンスは、(あと一つ、型をくっつければ有効な型となる)型コンストラクタである。

モナドの定義とインスタンスの例
-- モナド型クラスの定義
class Monad (m :: * -> *) where
  (>>=) :: m a -> (a -> m b) -> m b
  (>>) :: m a -> m b -> m b
  return :: a -> m a
  fail :: String -> m a

-- [](リスト[a]の型コンストラクタ)
instance Monad [] -- あと一つ、型をくっつければ有効な型となる

-- State state (型State state a の型コンストラクタ)
instance Monad (State state) -- あと一つ、型をくっつければ有効な型となる

多分、 * -> * という表記の意味するところが、型引数を一つ持つ型コンストラクタ ということなのだろう。また、結果的に当たり前なのだが、モナドのアクションは、この型コンストラクタ + 一つの型 が返り値の型となりそうだ。

10
9
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
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?