すべての比較を関数に委譲Ord
するデータ型のインスタンスを作成したいと考えています。ここで、インスタンスが利用可能なデータ型です。Foo
bar :: Foo -> Bar
Bar
Ord
このインスタンスを手動で記述すると、次のようになります。
instance Ord Foo where
compare x y
| bar x == bar y = EQ
| bar x <= bar y = LT
| otherwise = GT
これをもっと簡潔に書く方法はありますか?
Scala (Scalaz を使用) では、次のように記述できます。
implicit val FooOrder: Order[Foo] = Order[Bar] contramap bar
Haskellには似たようなものがありますか?