2020-04-30 17:58:35 +04:00
|
|
|
|
|
|
|
module Range where
|
|
|
|
|
2020-05-21 23:28:26 +04:00
|
|
|
import Control.Lens
|
|
|
|
|
2020-05-01 19:04:29 +04:00
|
|
|
import Pretty
|
2020-04-30 21:06:01 +04:00
|
|
|
|
2020-05-08 01:18:26 +04:00
|
|
|
-- | A continuous location in text.
|
2020-04-30 17:58:35 +04:00
|
|
|
data Range = Range
|
2020-05-08 01:18:26 +04:00
|
|
|
{ rStart :: (Int, Int, Int) -- ^ [Start: line, col, byte-offset...
|
|
|
|
, rFinish :: (Int, Int, Int) -- ^ ... End: line, col, byte-offset).
|
2020-04-30 17:58:35 +04:00
|
|
|
}
|
2020-05-01 19:04:29 +04:00
|
|
|
deriving (Show) via PP Range
|
2020-04-30 17:58:35 +04:00
|
|
|
|
2020-05-08 01:18:26 +04:00
|
|
|
-- | TODO: Ugh. Purge it.
|
2020-04-30 17:58:35 +04:00
|
|
|
diffRange :: Range -> Range -> Range
|
|
|
|
diffRange (Range ws wf) (Range ps _) = Range (max ws ps) wf
|
|
|
|
|
2020-04-30 21:06:01 +04:00
|
|
|
instance Pretty Range where
|
|
|
|
pp (Range (ll, lc, _) (rl, rc, _)) =
|
|
|
|
brackets do
|
2020-05-21 23:28:26 +04:00
|
|
|
int ll <> ":" <> int lc <> "-" <> int rl <> ":" <> int rc
|
|
|
|
|
|
|
|
class HasRange a where
|
2020-06-01 18:17:33 +04:00
|
|
|
getRange :: a -> Range
|