1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module AST.Span where

-- |Position
type Pos = (Int, Int)

--- Shows a position.
showPos :: Pos -> String
showPos (l,c) = show l ++ "." ++ show c

-- |Span (start and end position)
type Span = (Pos, Pos)

-- |start position of a span
start :: Span -> Pos
start = fst

-- |end position of a span
end :: Span -> Pos
end = snd

startPos :: Pos
startPos = (1,1)

-- |Virtual position for AST-elements that have no "physical" positions like
--  e.g. the import of Prelude
virtualPos :: Pos
virtualPos = (0, 0)

-- |Virtual span for AST-elements that have no "physical" spans like
--  e.g. the import of Prelude
virtualSpan :: Span
virtualSpan = (virtualPos, virtualPos)

-- |Is a position a virtual position?
isVirtualPos :: Pos -> Bool
isVirtualPos p = p == virtualPos