標準ではinstance宣言に型シノニムや特定の型が使えないのは

これは特定の型にアイデンティティを与えているから
newtypeを使うべきだという設計思想なのでしょうか?


SomeTypeではsomefunがこんなんで
(SomeType,SomeType)の時はsomefunは特別にこういう感じにしたい
なんてトリガーのような真似したい時は
やはりnewtype SomeTypePair = SomeTypePair (SomeType,SomeType)
などと一々作らないといけないのでしょうか?

と書いてて思ったんですが

Haskellに於けるオーバーロードとは
・共通属性を抽出して型クラスを策定
・newtype or data宣言
・その型で先の型クラスのinstance宣言
という一連の作業でするものなのですか?