Haskellのorphan instanceが何者なのか、その意味するところをちゃんと理解してなかったので調べてみた。 orphan instancesとは何? 型クラスの定義ともデータ型の定義とも異なるモジュールで定義されたインスタンス宣言のこと 例: T.hsで定義されたデータ型Tについて、モジュールM.hsでinstance Show Tとインスタンス宣言されていたら、それはorphan instance。 このインスタンス宣言は、型クラスShowともデータ型Tとも異なるモジュールで宣言されているから。 orphan instancesはいいもん?わるもん? ケースバイケース 前提: Haskell 98では重複した*1インスタンス宣言を扱えない。 利点: ケースによってインスタンス宣言を差し替えられるように、複数のインスタンスを定義したい場合は、別モジュールに定義する(つまりor