標準の演算子

Haskell の演算子は,唯一の単項演算子である負号 - を除いて,全て二項演算子です。
標準定義されている二項演算子の優先順位と結合性は次の通りです。

優先順位結合性演算子
9左結合!!
右結合.
8右結合^ ^^ **
7左結合* / `div` `mod` `rem` `quot`
6左結合+ -
5右結合: ++
4非結合== /= < <= > >= `elem` `notElem`
3右結合&&
2右結合||
1左結合>> >>=
0右結合$ $! `seq`

非結合は,結合性に意味が無いことを意味します。
例えば,x > y > z という式は Haskell では無効であり,演算子 > の結合性には意味がありません。

演算子の定義

演算子には主に次の文字が使えます。

!  #  $  %  &  *  +  .  /  <  =  >  ?  @  \  ^  |  -  ~

ただし,以下の演算子は独自に定義できません。
また,コロン : で始まるシンボルはコンストラクタ用に予約されています。

..  :  ::  =  \  |  <-  ->  @  ~  =>

演算子は 2 引数の関数として定義します。
例えば,String 型の == 演算子の定義をあえて書くなら,次のようになります。

(==) :: String -> String -> Bool
[] == []         = True
(x:xs) == (y:ys) = x == y && xs == ys
_ == _           = False

結合性宣言

演算子の結合性と優先順位を指定するには,次のように書きます。

結合性 優先順位 演算子

結合性は,infixl (左結合),infixr (右結合),infix (非結合) の何れかを指定します。
優先順位は 0 から 9 (9 が最も強い) までの数字で指定します。
優先順位の数字は省略でき,省略した場合の優先順位は 9 となります。

例えば,演算子 && (右結合,優先順位 3) の結合性宣言は,次のように書けます。

infixr 3 &&
目次へ戻る