@@ -6,16 +6,18 @@ import qualified Data.Aeson as Json
6import qualified Text.Parsec.Pos as Parsec
6import qualified Text.Parsec.Pos as Parsec
9−data Region = Region
9+data Region =
10− { start :: Position
11+ { start :: !Position
11− , end :: Position
12+ , end :: !Position
13 deriving (Eq, Show)
14 deriving (Eq, Show)
16−data Position = Position
17+data Position =
17− { line :: Int
19+ { line :: {-# UNPACK #-} !Int
18− , column :: Int
20+ , column :: {-# UNPACK #-} !Int
20 deriving (Eq, Show)
22 deriving (Eq, Show)
@@ -32,22 +34,26 @@ merge (Region start _) (Region _ end) =
32 Region start end
34 Region start end
35-- TO STRING
38-- TO STRING
37toString :: Region -> String
41toString :: Region -> String
38−toString (Region start end) =
42+toString (Region (Position startLine startColumn) (Position endLine endColumn)) =
39− case line start == line end of
43+ case startLine == endLine of
41− "between lines " ++ show (line start)
45+ "between lines " ++ show startLine
42− ++ " and " ++ show (line end)
46+ ++ " and " ++ show endLine
45− "on line " ++ show (line end) ++ ", column "
49+ "on line " ++ show endLine ++ ", column "
46− ++ show (column start) ++ " to " ++ show (column end)
50+ ++ show startColumn ++ " to " ++ show endColumn
51instance Json.ToJSON Region where
57instance Json.ToJSON Region where
52 toJSON (Region start end) =
58 toJSON (Region start end) =
53 Json.object
59 Json.object