@@ -6,16 +6,18 @@ import qualified Data.Aeson as Json
66import qualified Text.Parsec.Pos as Parsec
77
88
9−data Region = Region
10− { start :: Position
11− , end :: Position
9+data Region =
10+ Region
11+ { start :: !Position
12+ , end :: !Position
1213 }
1314 deriving (Eq, Show)
1415
1516
16−data Position = Position
17− { line :: Int
18− , column :: Int
17+data Position =
18+ Position
19+ { line :: {-# UNPACK #-} !Int
20+ , column :: {-# UNPACK #-} !Int
1921 }
2022 deriving (Eq, Show)
2123
@@ -32,22 +34,26 @@ merge (Region start _) (Region _ end) =
3234 Region start end
3335
3436
37+
3538-- TO STRING
3639
40+
3741toString :: Region -> String
38−toString (Region start end) =
39− case line start == line end of
42+toString (Region (Position startLine startColumn) (Position endLine endColumn)) =
43+ case startLine == endLine of
4044 False ->
41− "between lines " ++ show (line start)
42− ++ " and " ++ show (line end)
45+ "between lines " ++ show startLine
46+ ++ " and " ++ show endLine
4347
4448 True ->
45− "on line " ++ show (line end) ++ ", column "
46− ++ show (column start) ++ " to " ++ show (column end)
49+ "on line " ++ show endLine ++ ", column "
50+ ++ show startColumn ++ " to " ++ show endColumn
51+
4752
4853
4954-- JSON
5055
56+
5157instance Json.ToJSON Region where
5258 toJSON (Region start end) =
5359 Json.object