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)