on 267f708 help sign in
elk/src/Reporting/Region.hs
64 lines 1.3 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Reporting.Region where
4import Data.Aeson ((.=))
5import qualified Data.Aeson as Json
6import qualified Text.Parsec.Pos as Parsec
9data Region = Region
10 { start :: Position
11 , end :: Position
12 }
13 deriving (Eq, Show)
16data Position = Position
17 { line :: Int
18 , column :: Int
19 }
20 deriving (Eq, Show)
23fromSourcePos :: Parsec.SourcePos -> Position
24fromSourcePos sourcePos =
25 Position
26 (Parsec.sourceLine sourcePos)
27 (Parsec.sourceColumn sourcePos)
30merge :: Region -> Region -> Region
31merge (Region start _) (Region _ end) =
32 Region start end
35-- TO STRING
37toString :: Region -> String
38toString (Region start end) =
39 case line start == line end of
40 False ->
41 "between lines " ++ show (line start)
42 ++ " and " ++ show (line end)
44 True ->
45 "on line " ++ show (line end) ++ ", column "
46 ++ show (column start) ++ " to " ++ show (column end)
49-- JSON
51instance Json.ToJSON Region where
52 toJSON (Region start end) =
53 Json.object
54 [ "start" .= start
55 , "end" .= end
56 ]
59instance Json.ToJSON Position where
60 toJSON (Position line column) =
61 Json.object
62 [ "line" .= line
63 , "column" .= column
64 ]