Haskellの矢印の記号「->」の読み方
Haskellの勉強メモ。
(p.120) 関数の型
->という矢印のような表現が型の部分に出てきました。
関数の型はこのように「何かの型->何かの型」という型で表され、「矢印の元の型の値を受け取って、矢印の先の型の値になる」関数であることを意味します。
で、この「->」という矢印の記号をHaskellでは何と呼ぶのか?記号の読み方が説明されていなかったので調べてみました。
他のプログラミング言語だと「->」という記号には「アロー演算子」などという名前が付けてあります。
Haskellでも「->」という記号は「アロー演算子」と呼ぶのでしょうか?
このキーワードで検索しても、よく分かりませんでした。
このキーワードで検索したら、以下のような情報が出てきました。
-> -> 型コンストラクタ。カインド
他にもいろんな記号が紹介されていました。たくさんありますね!
| 記号 | 読み方(意味、例) |
|---|---|
| ! | アレーのインデクス。(!) :: Ix i => Array i e -> i -> e |
| ! | 正格(strict)フラグ。foo !x -> foo strict x。とか |
| !! | リストのインデクス。(!!) :: [a] -> Int -> a |
| $ | カッコのかわり ($) :: (a -> b) -> a -> b |
| $! | カッコのかわりの正格バージョン。$!以降が先に評価される |
| && | 論理積。(&&) :: Bool -> Bool -> Bool |
| () | カッコ。ユニット型。() :: () |
| * | 掛け算。(*) :: Num a => a -> a -> a |
| *, #, ?, ??, ~ | カインド。型制約 |
| >, <>, <* | アプリカティブ。Applicative f => f a -> f b -> f b、f (a -> b) -> f a -> f b、f a -> f b -> f a |
| ++ | concat。(++) :: [a] -> [a] -> [a] |
| , | カンマ。タプル型コンストラクタ。(,) :: a -> b -> (a, b) |
| -> | 型コンストラクタ。カインド |
| . | ピリオド。パイプ。関数の合成。(.) :: (b -> c) -> (a -> b) -> a -> c |
| / | 割り算。(/) :: Fractional a => a -> a -> a |
| /= | 論理否定。(/=) :: Eq a => a -> a -> Bool |
| : | コロン。コンス。リスト型コンストラクタ。(:) :: a -> [a] -> [a] |
| :: | (の)タイプ(は) |
| :{, :} | ghci上で複数行 |
| < | 小なり。Ord a => a -> a -> Bool |
| <$, <$> | ファンクタ。(f)map。Functor f => a -> f b -> f a、 (a -> b) -> f a -> f b |
| <- | 束縛、バインド(IOアクション) |
| <= | 小なりイコール。Ord a => a -> a -> Bool |
| <> | mappend。(<>) :: Monoid m => m -> m -> m |
| == | イコール。(==) :: Eq a => a -> a -> Bool |
| => | 型制約。Ord a => a、とか。 |
| > | 大なり。Ord a => a -> a -> Bool |
| >-> | ストリームとしてつなぐ。Pipe |
| >= | 大なりイコール。Ord a => a -> a -> Bool |
| >>, >>=, =<<, >=> | モナド。バインド。Monad m => m a -> m b -> m b、m a -> (a -> m b) -> m b、(a -> m b) -> m a -> m b,(a -> m b) -> (b -> m c) -> a -> m c |
| @ | as。アズパターン。ll@(l:ls)とか。 |
| [ ] | 空リスト。[ ] :: [t] |
| \ | ラムダlambda。(\x -> x ^2) 3 -> 9 |
| & | 空文字列"" -> 文字列パース用 |
| _ | ワイルドカードパターン。 |
| | | ガードの区切り。内包表記list comprehensionの区切り |
| || | 論理和。(||) :: Bool -> Bool -> Bool |
| ~ | 反駁不可能パターン。レイジーパターン。irrefutable pattners, lazy patterns |
| { } | レコード構文、記法(フィールドに名前をつける)ときの大カッコ。 |
| ^ | 累乗。(^) :: (Integral b, Num a) => a -> b -> a |
| % | 有理数。有理数割り算。(%) :: Integral a => a -> a -> Ratio a |
Haskellの「->」という記号は、「型コンストラクタ」「カインド」という仕組みと関係してるみたいです。
この情報を手掛かりとして、もう1回検索してみます。
Haskell "->" 型コンストラクタ - Google 検索
うーん、いまいちよく分かりません。
他にも、こんな情報もありました。
(->) is often called the "function arrow" or "function type constructor", and while it does have some special syntax, there's not that much special about it.
(Googl翻訳)
( - >)はしばしば "function arrow"や "function type constructor"と呼ばれ、特別な構文はありますがそれほど特別なことはありません。
- function arrow → 関数アロー
- function type constructor → 関数型コンストラクタ―
こんな日本語になるのでしょうか?
仕方ないので、しばらくは「->」を「矢印」という名前で呼んでおきます。
Haskellの記号には矢印っぽいのがたくさんあるので、これだと言葉だけでは何を指しているのか?曖昧だけど、仕方ないですね。
「->」の情報
前回勉強した「:t」「:k」「:i」コマンドで「->」の情報を調べてみます。

こんなのが出ました。(意味不明w)
Haskellの「->」という記号の正確な名称、読み方が分かったら、追記しておきたいと思います。
とりあえず、ここでは気になったことのメモとして残しておきます。
[増補改訂]関数プログラミング実践入門 ──簡潔で、正しいコードを書くために (WEB+DB PRESS plus)
- 作者: 大川徳之
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る