on 32c17ec help sign in
40 lines 1.1 kB history raw
1{-# LANGUAGE DeriveDataTypeable #-}
2module SourceSyntax.Location where
4import qualified Text.Parsec.Pos as Parsec
5import Data.Data
7data SrcPos = Pos { line :: Int, column :: Int }
8 deriving (Eq, Ord, Data, Typeable)
10data SrcSpan = Span SrcPos SrcPos | NoSpan
11 deriving (Eq, Ord, Data, Typeable)
13data Located e = L SrcSpan e
14 deriving (Eq, Ord, Data, Typeable)
17instance Show SrcPos where
18 show (Pos r c) = "Line " ++ show r ++ ", Column " ++ show c
20instance Show SrcSpan where
21 show span =
22 case span of
23 Span start end -> show start
24 NoSpan -> ""
26instance Show e => Show (Located e) where
27 show (L _ e) = show e
29none = L NoSpan
31at start end = L (Span (Pos (Parsec.sourceLine start) (Parsec.sourceColumn start))
32 (Pos (Parsec.sourceLine end ) (Parsec.sourceColumn end )))
34merge (L s1 _) (L s2 _) = L span
35 where span = case (s1,s2) of
36 (Span start _, Span _ end) -> Span start end
37 (_, NoSpan) -> s1
38 (NoSpan, _) -> s2
40sameAs (L s _) = L s