2013-11-18 3 views
9

Там, наверное, уже есть newtype, что переворачивает смысл Ord, Bounded и т.д. Что-то вдоль линийHaskell Newtype, который меняет или переворачивает порядок

newtype FlipOrd a = FlipOrd {unFlip :: a} deriving (Eq) 

instance (Ord a) => Ord (FlipOrd a) where 
    compare = flip compare 

instance (Bounded a) => Bounded (FlipOrd a) where 
    minBound = FlipOrd maxBound 
    maxBound = FlipOrd minBound 

Где это жить в существующих пакетах Haskell?

Примечание: Есть существующий ReverseFunctor, который делает что-то совсем другое и, к счастью, имеет совершенно несовместимый вид.

ответ

9

Это просто в Data.Ord: Down. (Это, однако, не имеет экземпляра Bounded.)

+2

Спасибо. Я не возражаю против дублирования экземпляров, подобных типам; если он добавлен в какой-то другой код, компилятор расскажет мне об этом, и его легко исправить (просто удалите один экземпляр). – Cirdec

Смежные вопросы