18 lines
501 B
Haskell
18 lines
501 B
Haskell
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, Typeable)
|
|
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
|
|
|