on ca2be8a help sign in
elk/src/Reporting/Region.hs
93 lines 1.3 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Reporting.Region
3 ( Region(..)
4 , Position(..)
5 , zero
6 , one
7 , merge
8 , encode
9 )
10 where
13import qualified Json.Encode as Json
14import Data.Binary (Binary, get, put)
18-- REGION
21data Region =
22 Region
23 { _start :: !Position
24 , _end :: !Position
25 }
26 deriving (Eq, Ord)
29data Position =
30 Position
31 { _line :: !Int
32 , _column :: !Int
33 }
34 deriving (Eq, Ord)
37merge :: Region -> Region -> Region
38merge (Region start _) (Region _ end) =
39 Region start end
42{-# NOINLINE zero #-}
43zero :: Region
44zero =
45 Region (Position 0 0) (Position 0 0)
48{-# NOINLINE one #-}
49one :: Region
50one =
51 Region (Position 1 1) (Position 1 1)
55-- JSON
58encode :: Region -> Json.Value
59encode (Region start end) =
60 Json.object
61 [ ("start", encodePosition start)
62 , ("end", encodePosition end)
63 ]
66encodePosition :: Position -> Json.Value
67encodePosition (Position line column) =
68 Json.object
69 [ ("line", Json.int line)
70 , ("column", Json.int column)
71 ]
75-- BINARY
78instance Binary Region where
79 get =
80 Region <$> get <*> get
82 put (Region start end) =
83 do put start
84 put end
87instance Binary Position where
88 get =
89 Position <$> get <*> get
91 put (Position line column) =
92 do put line
93 put column