on bc755bb help sign in
elk/src/Reporting/Region.hs
78 lines 1.1 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Reporting.Region
3 ( Region(..)
4 , Position(..)
5 , merge
6 )
7 where
9import Data.Aeson ((.=))
10import qualified Data.Aeson as Json
11import Data.Binary
15-- REGION
18data Region =
19 Region
20 { _start :: !Position
21 , _end :: !Position
22 }
23 deriving (Eq, Ord)
26data Position =
27 Position
28 { _line :: !Int
29 , _column :: !Int
30 }
31 deriving (Eq, Ord)
34merge :: Region -> Region -> Region
35merge (Region start _) (Region _ end) =
36 Region start end
40-- JSON
43instance Json.ToJSON Region where
44 toJSON (Region start end) =
45 Json.object
46 [ "start" .= start
47 , "end" .= end
48 ]
51instance Json.ToJSON Position where
52 toJSON (Position line column) =
53 Json.object
54 [ "line" .= line
55 , "column" .= column
56 ]
60-- BINARY
63instance Binary Region where
64 get =
65 Region <$> get <*> get
67 put (Region start end) =
68 do put start
69 put end
72instance Binary Position where
73 get =
74 Position <$> get <*> get
76 put (Position line column) =
77 do put line
78 put column