-- SPDX-FileCopyrightText: 2022 Gregor Kleen -- -- SPDX-License-Identifier: AGPL-3.0-or-later module Utils.NTop ( NTop(..) ) where import ClassyPrelude -- | treat Nothing as Top for Ord (Maybe a); default implementation treats Nothing as bottom newtype NTop a = NTop { nBot :: a } deriving (Read, Show, Generic) deriving newtype (Eq) instance Ord a => Ord (NTop (Maybe a)) where compare (NTop Nothing) (NTop Nothing) = EQ compare (NTop Nothing) _ = GT compare _ (NTop Nothing) = LT compare (NTop (Just x)) (NTop (Just y)) = compare x y