{-# LANGUAGE TemplateHaskell #-}
module Data.Geometry.Interval.Util where

import Control.DeepSeq
import Control.Lens
import Data.Range
import GHC.Generics (Generic)


-- | Open on left endpoint; so Closed before open
newtype L r = L { _unL :: EndPoint r } deriving (Show,Eq,Generic,NFData)
makeLenses ''L
instance Ord r => Ord (L r) where
  a `compare` b = f ( _unL a) `compare` f (_unL b)
    where
      f (Open x)   = (x,True)
      f (Closed x) = (x,False)

-- | Order on right endpoint; so Open before Closed
newtype R r = R { _unR :: EndPoint r } deriving (Show,Eq,Ord,Generic,NFData)
makeLenses ''R