on 0bdfd73 help sign in
elk/src/Reporting/Region.hs
79 lines 1.1 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Reporting.Region
3 ( Region(..)
4 , Position(..)
5 , merge
6 , encode
7 )
8 where
11import qualified Json.Encode as Json
12import Data.Binary (Binary, get, put)
16-- REGION
19data Region =
20 Region
21 { _start :: !Position
22 , _end :: !Position
23 }
24 deriving (Eq, Ord)
27data Position =
28 Position
29 { _line :: !Int
30 , _column :: !Int
31 }
32 deriving (Eq, Ord)
35merge :: Region -> Region -> Region
36merge (Region start _) (Region _ end) =
37 Region start end
41-- JSON
44encode :: Region -> Json.Value
45encode (Region start end) =
46 Json.object
47 [ ("start", encodePosition start)
48 , ("end", encodePosition end)
49 ]
52encodePosition :: Position -> Json.Value
53encodePosition (Position line column) =
54 Json.object
55 [ ("line", Json.int line)
56 , ("column", Json.int column)
57 ]
61-- BINARY
64instance Binary Region where
65 get =
66 Region <$> get <*> get
68 put (Region start end) =
69 do put start
70 put end
73instance Binary Position where
74 get =
75 Position <$> get <*> get
77 put (Position line column) =
78 do put line
79 put column