型クラスを表示した時に括弧が表示されない理由


『すごいHaskell』を読みながら本にあるコードを入力していっているのですが

[code]

    ghci> :t (==)
    (==) :: (Eq a) => a -> a -> Bool
    
[/code]

と型クラスで表示されると本にあったものが  
実際にコンソールで入力してみると

[code]

    ghci> :t (==)
    (==) :: Eq a => a -> a -> Bool
    
[/code]

と`Eq q`が括弧で囲まれていない状態で表示されました。

特に気にしなくてもいいかとも思ったのですが、  
括弧の有無が厳密な言語なので  
もしこの表記の違いの理由を知ってる方がいたら教えて下さい。




カッコが必須なのは、制約を2つ以上書くときです。

例えば、GHCiで `:i (,)` を実行すると、下記のように`(a,
b)`の`Eq`型クラスのインスタンスは、`a`と`b`両方が`Eq`のインスタンスでないといけないので、それを表現するためにカッコで囲って`Eq
a`と`Eq b`を列挙しています。

[code]

    ghci> :i (,)
    ...
    
    instance (Eq a, Eq b) => Eq (a, b) -- Defined in ‘GHC.Classes’
    
    ...
    
[/code]




カッコが必須なのは、制約を2つ以上書くときです。

例えば、GHCiで `:i (,)` を実行すると、下記のように`(a,
b)`の`Eq`型クラスのインスタンスは、`a`と`b`両方が`Eq`のインスタンスでないといけないので、それを表現するためにカッコで囲って`Eq
a`と`Eq b`を列挙しています。

[code]

    ghci> :i (,)
    ...
    
    instance (Eq a, Eq b) => Eq (a, b) -- Defined in ‘GHC.Classes’
    
    ...
    
[/code]

