3

すべての比較を関数に委譲Ordするデータ型のインスタンスを作成したいと考えています。ここで、インスタンスが利用可能なデータ型です。Foobar :: Foo -> BarBarOrd

このインスタンスを手動で記述すると、次のようになります。

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には似たようなものがありますか?

4

1 に答える 1

11
import Data.Ord

instance Ord Foo where
    compare = comparing bar

OTTOMH について考えることができる最も簡潔なバージョンです。

少し簡潔ではありませんが、一般化する方が適切です

import Data.Function

instance Ord Foo where
    compare = compare `on` bar
于 2012-11-03T23:17:31.443 に答える