elm/compiler/Model/Context.hs

43 lines
No EOL
1,018 B
Haskell

module Context where
import Text.Parsec.Pos
data SrcPos = Pos Int Int
deriving (Eq,Ord)
data SrcSpan = Span SrcPos SrcPos | NoSpan
deriving (Eq,Ord)
data Context e = C (Maybe String) SrcSpan e deriving (Eq,Ord)
instance Show SrcPos where
show (Pos r c) = "Line " ++ show r ++ ", Column " ++ show c
instance Show SrcSpan where
show span =
case span of
Span start end -> show start
NoSpan -> ""
instance Show e => Show (Context e) where
show (C _ _ e) = show e
noContext = C Nothing NoSpan
pos start end = C Nothing
(Span (Pos (sourceLine start) (sourceColumn start))
(Pos (sourceLine end ) (sourceColumn end )))
epos (C _ s1 _) (C _ s2 _) = C Nothing span
where span = case (s1,s2) of
(Span start _, Span _ end) -> Span start end
(_, NoSpan) -> s1
(NoSpan, _) -> s2
addCtx x (C Nothing span e) = C (Just (show x)) span e
addCtx x (C txt span e) = C txt span e