60987


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

[code]

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

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

[code]

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

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

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


CC BY-SA 4.0
2019-12-01T09:50:25.203
60985
2019-12-01T10:18:31.617
3271
question
haskell
型クラスを表示した時に括弧が表示されない理由


カッコが必須なのは、制約を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]


CC BY-SA 4.0
2019-12-01T10:18:31.617
60987
2019-12-01T10:18:31.617
8007
60985
answer