on f232da4 help sign in
elk/src/Reporting/Region.hs
62 lines 1.1 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Reporting.Region where
4import Data.Aeson ((.=))
5import qualified Data.Aeson as Json
8data Region =
9 Region
10 { _start :: !Position
11 , _end :: !Position
12 }
13 deriving (Eq, Show)
16data Position =
17 Position
18 { _line :: !Int
19 , _column :: !Int
20 }
21 deriving (Eq, Show)
24merge :: Region -> Region -> Region
25merge (Region start _) (Region _ end) =
26 Region start end
30-- TO STRING
33toString :: Region -> String
34toString (Region (Position startLine startColumn) (Position endLine endColumn)) =
35 case startLine == endLine of
36 False ->
37 "between lines " ++ show startLine
38 ++ " and " ++ show endLine
40 True ->
41 "on line " ++ show endLine ++ ", column "
42 ++ show startColumn ++ " to " ++ show endColumn
46-- JSON
49instance Json.ToJSON Region where
50 toJSON (Region start end) =
51 Json.object
52 [ "start" .= start
53 , "end" .= end
54 ]
57instance Json.ToJSON Position where
58 toJSON (Position line column) =
59 Json.object
60 [ "line" .= line
61 , "column" .= column
62 ]