Haskellの演算子について纏めてみた
人が作ったHaskellのコードを読んでいると、記号の意味がわからなくて困ることが多々あったので纏めてみた。hrefでもGoogleでも検索できないしさ…
Haskellの演算子で使える記号
!#$%&*+./<=>?@\^|-~
及びUnicodeに含まれる記号(一覧が欲しい…けど√とか→とかもきっとそうだよね。)
ただし「(),;[]`{}_:"'」は除く
さらに、「:」で始まるのはデータコンストラクタで予約されているので演算子では使えない。
また、以下の記号列は予約されている
演算子 | 意味 |
---|---|
.. | リストの範囲指定。 |
: | リストのcons。 |
:: | 型指定 |
= | 関数束縛。 |
\ | ラムダ(無名関数)。 |
| | パターンマッチのガード条件。data型enum定義。リスト内包表現。 |
<- | リスト内包表現のジェネレータ。do記法での値束縛。 |
-> | 関数の型定義。ラムダ(無名関数)定義。case式。 |
@ | アズパターン。 |
~ | 遅延パターン??? |
=> | 型クラスの制約 |
演算子の優先度と結合規則
優先度 | 左結合 | 無結合 | 右結合 |
---|---|---|---|
9 | !! | . | |
8 | ^, ^^, ** | ||
7 | *, /, `div`, `mod`, `rem`, `quot` | ||
6 | +, - | ||
5 | :, ++ | ||
4 | ==, /=, <, <=, >, >=, `elem`, `notElem` | ||
3 | && | ||
2 | || | ||
1 | >>, >>= | ||
0 | $, $!, `seq` |
主な(記号で出来た)演算子
クラス or 型 | 演算子 | 意味 | |
---|---|---|---|
(.) | 関数合成 | ||
($) | 優先度が一番低いので括弧の代わりになる? | ||
($!) | 正格評価、seq | ||
(!) | 正格評価 | ||
Bool | (&&) | 論理積 | |
Bool | (||) | 論理和 | |
Eq | (==) | 等号 | |
Eq | (/=) | 不等号 | |
Ord | (<) | 比較 | |
Ord | (<=) | 比較 | |
Ord | (>=) | 比較 | |
Ord | (>) | 比較 | |
Num | (+) | 加算 | |
Num | (-) | 減算 or 負 | |
Num | (*) | 乗算 | |
Num | (^) | 累乗 (^) :: (Num a, Integral b) => a -> b -> a | |
Fractional | (/) | 除算 | |
Fractional | (^^) | 累乗 (^^) :: (Fractional a, Integral b) => a -> b -> a | |
Floating | (**) | 累乗 (**) :: a -> a -> a | |
Bits | (.&.) | ビットAND | |
Bits | (.|.) | ビットOR | |
List | (++) | リストの連結 | |
List | (!!) | リストのインデックス | |
List | (\\) | リストの差 | |
Array | (//) | 漸進的な配列 の更新 | |
Functor | (<$>) | fmap | |
Functor | (<$) | fmap . const | |
Applicative | (<*>) | ap | |
Applicative | (*>) | ||
Applicative | (<*) | ||
Applicative | (<**>) | ||
Alternative | (<|>) | ||
Monad | (>>=) | bind | |
Monad | (>>) | then | |
Monad | (=<<) | 逆方向束縛関数 | |
Arrow | (^>>) | ||
Arrow | (>>^) | ||
Arrow | (>>>) | ||
Arrow | (<<<) | ||
Arrow | (<<^) | ||
Arrow | (^<<) | ||
Arrow | <+> | ||
Arrow | ** | ||
Arrow | &&& | ||
Arrow | +++ | ||
Arrow | ||| | ||
Monoid | (<#>) | mappend | |
Parser | (?) | ||
Ratio | (%) | ||
Sequence | > | ||
Sequence | |||
Sequence | : | ||
Sequence | > | ||
Sequence | :> | ||
Map, IntMap | (!) | ||
Set, Map, IntMap | (\\) | ||
GraphRep | <*> | ||
GraphRep | |*><*| | ||
HughesPJ, PprLib | (<>), (<+>), ($$), ($+$) |
空白のところは識者に助言を頂きたく…
※ ruiccさんに教えていただいた演算子を修正しました。ありがとうございました。(2011-12-06)
※ さらに演算子をたくさん見つけたので追加しました。(2011-12-06)