on 2deedfb help sign in
elk/src/Reporting/Region.hs
89 lines 1.4 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Reporting.Region where
4import Data.Aeson ((.=))
5import qualified Data.Aeson as Json
6import Data.Binary
10-- REGION
13data Region =
14 Region
15 { _start :: !Position
16 , _end :: !Position
17 }
18 deriving (Eq, Ord)
21data Position =
22 Position
23 { _line :: !Int
24 , _column :: !Int
25 }
26 deriving (Eq, Ord)
29merge :: Region -> Region -> Region
30merge (Region start _) (Region _ end) =
31 Region start end
35-- TO STRING
38toString :: Region -> String
39toString (Region (Position startLine startColumn) (Position endLine endColumn)) =
40 case startLine == endLine of
41 False ->
42 "between lines " ++ show startLine
43 ++ " and " ++ show endLine
45 True ->
46 "on line " ++ show endLine ++ ", column "
47 ++ show startColumn ++ " to " ++ show endColumn
51-- JSON
54instance Json.ToJSON Region where
55 toJSON (Region start end) =
56 Json.object
57 [ "start" .= start
58 , "end" .= end
59 ]
62instance Json.ToJSON Position where
63 toJSON (Position line column) =
64 Json.object
65 [ "line" .= line
66 , "column" .= column
67 ]
71-- BINARY
74instance Binary Region where
75 get =
76 Region <$> get <*> get
78 put (Region start end) =
79 do put start
80 put end
83instance Binary Position where
84 get =
85 Position <$> get <*> get
87 put (Position line column) =
88 do put line
89 put column