ghc-7.6.3: The GHC API

Safe Haskell | None

SrcLoc

Contents

- SrcLoc
  - Constructing SrcLoc
  - Unsafely deconstructing SrcLoc
- SrcSpan
  - Constructing SrcSpan
  - Deconstructing SrcSpan
  - Unsafely deconstructing SrcSpan
  - Predicates on SrcSpan
- Located
  - Constructing Located
  - Deconstructing Located
  - Combining and comparing Located values

Description

This module contains types that relate to the positions of things in source files, and allow tagging of those things with locations

Synopsis

- data RealSrcLoc
- data SrcLoc
  - = RealSrcLoc !RealSrcLoc
  - | UnhelpfulLoc FastString
- mkSrcLoc :: FastString -> Int -> Int -> SrcLoc
- mkRealSrcLoc :: FastString -> Int -> Int -> RealSrcLoc
- mkGeneralSrcLoc :: FastString -> SrcLoc
- noSrcLoc :: SrcLoc
- generatedSrcLoc :: SrcLoc
- interactiveSrcLoc :: SrcLoc
- advanceSrcLoc :: RealSrcLoc -> Char -> RealSrcLoc
- srcLocFile :: RealSrcLoc -> FastString
- srcLocLine :: RealSrcLoc -> Int
- srcLocCol :: RealSrcLoc -> Int
- data RealSrcSpan
- data SrcSpan
  - = RealSrcSpan !RealSrcSpan
  - | UnhelpfulSpan !FastString
- mkGeneralSrcSpan :: FastString -> SrcSpan
- mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan
- mkRealSrcSpan :: RealSrcLoc -> RealSrcLoc -> RealSrcSpan
- noSrcSpan :: SrcSpan
- wiredInSrcSpan :: SrcSpan
- srcLocSpan :: SrcLoc -> SrcSpan
- realSrcLocSpan :: RealSrcLoc -> RealSrcSpan
- combineSrcSpans :: SrcSpan -> SrcSpan -> SrcSpan
- srcSpanStart :: SrcSpan -> SrcLoc
- srcSpanEnd :: SrcSpan -> SrcLoc
- realSrcSpanStart :: RealSrcSpan -> RealSrcLoc
- realSrcSpanEnd :: RealSrcSpan -> RealSrcLoc
- srcSpanFileName_maybe :: SrcSpan -> Maybe FastString
- showUserSpan :: Bool -> SrcSpan -> String
- srcSpanFile :: RealSrcSpan -> FastString
- srcSpanStartLine :: RealSrcSpan -> Int
- srcSpanEndLine :: RealSrcSpan -> Int
- srcSpanStartCol :: RealSrcSpan -> Int
- srcSpanEndCol :: RealSrcSpan -> Int
- isGoodSrcSpan :: SrcSpan -> Bool
- isOneLineSpan :: SrcSpan -> Bool
- type Located e = GenLocated SrcSpan e
- type RealLocated e = GenLocated RealSrcSpan e
- data GenLocated l e = L l e
- noLoc :: e -> Located e
- mkGeneralLocated :: String -> e -> Located e
- getLoc :: GenLocated l e -> l
- unLoc :: GenLocated l e -> e
- eqLocated :: Eq a => Located a -> Located a -> Bool
- cmpLocated :: Ord a => Located a -> Located a -> Ordering
- combineLocs :: Located a -> Located b -> SrcSpan
- addCLoc :: Located a -> Located b -> c -> Located c
- leftmost_smallest :: SrcSpan -> SrcSpan -> Ordering
- leftmost_largest :: SrcSpan -> SrcSpan -> Ordering
- rightmost :: SrcSpan -> SrcSpan -> Ordering
- spans :: SrcSpan -> (Int, Int) -> Bool
- isSubspanOf :: SrcSpan -> SrcSpan -> Bool
- sortLocated :: [Located a] -> [Located a]

# SrcLoc

data RealSrcLoc

Represents a single point within a file

Instances

Eq RealSrcLoc |
Ord RealSrcLoc |
Show RealSrcLoc |
Outputable RealSrcLoc |

data SrcLoc

Constructors

RealSrcLoc !RealSrcLoc |
UnhelpfulLoc FastString |

Instances

Eq SrcLoc |
Ord SrcLoc |
Outputable SrcLoc |

## Constructing SrcLoc

mkSrcLoc :: FastString -> Int -> Int -> SrcLoc

mkRealSrcLoc :: FastString -> Int -> Int -> RealSrcLoc

mkGeneralSrcLoc :: FastString -> SrcLoc

Creates a bad `SrcLoc` that has no detailed information about its location

noSrcLoc :: SrcLoc

Built-in bad `SrcLoc` values for particular locations

generatedSrcLoc :: SrcLoc

Built-in bad `SrcLoc` values for particular locations

interactiveSrcLoc :: SrcLoc

Built-in bad `SrcLoc` values for particular locations

advanceSrcLoc :: RealSrcLoc -> Char -> RealSrcLoc

Move the `SrcLoc` down by one line if the character is a newline, to the next 8-char tabstop if it is a tab, and across by one character in any other case

## Unsafely deconstructing SrcLoc

srcLocFile :: RealSrcLoc -> FastString

Gives the filename of the `RealSrcLoc`

srcLocLine :: RealSrcLoc -> Int

Raises an error when used on a bad `SrcLoc`

srcLocCol :: RealSrcLoc -> Int

Raises an error when used on a bad `SrcLoc`

# SrcSpan

data RealSrcSpan

A SrcSpan delimits a portion of a text file. It could be represented by a pair of (line,column) coordinates, but in fact we optimise slightly by using more compact representations for single-line and zero-length spans, both of which are quite common.

The end position is defined to be the column after the end of the span. That is, a span of (1,1)-(1,2) is one character long, and a span of (1,1)-(1,1) is zero characters long.

Instances

Eq RealSrcSpan |
Data RealSrcSpan |
Show RealSrcSpan |
Typeable RealSrcSpan |
Outputable RealSrcSpan |

data SrcSpan

Constructors

RealSrcSpan !RealSrcSpan |
UnhelpfulSpan !FastString |

Instances

Eq SrcSpan |
Data SrcSpan |
Ord SrcSpan |
Show SrcSpan |
Typeable SrcSpan |
Outputable SrcSpan |

## Constructing SrcSpan

mkGeneralSrcSpan :: FastString -> SrcSpan

Create a bad `SrcSpan` that has not location information

mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan

Create a `SrcSpan` between two points in a file

mkRealSrcSpan :: RealSrcLoc -> RealSrcLoc -> RealSrcSpan

Create a `SrcSpan` between two points in a file

noSrcSpan :: SrcSpan

Built-in bad `SrcSpan`s for common sources of location uncertainty

wiredInSrcSpan :: SrcSpan

Built-in bad `SrcSpan`s for common sources of location uncertainty

srcLocSpan :: SrcLoc -> SrcSpan

Create a `SrcSpan` corresponding to a single point

realSrcLocSpan :: RealSrcLoc -> RealSrcSpan

combineSrcSpans :: SrcSpan -> SrcSpan -> SrcSpan

Combines two `SrcSpan` into one that spans at least all the characters within both spans. Assumes the file part is the same in both inputs

## Deconstructing SrcSpan

srcSpanStart :: SrcSpan -> SrcLoc

Returns the location at the start of the `SrcSpan` or a bad `SrcSpan` if that is unavailable

srcSpanEnd :: SrcSpan -> SrcLoc

Returns the location at the end of the `SrcSpan` or a bad `SrcSpan` if that is unavailable

realSrcSpanStart :: RealSrcSpan -> RealSrcLoc

realSrcSpanEnd :: RealSrcSpan -> RealSrcLoc

srcSpanFileName_maybe :: SrcSpan -> Maybe FastString

Obtains the filename for a `SrcSpan` if it is good

showUserSpan :: Bool -> SrcSpan -> String

## Unsafely deconstructing SrcSpan

srcSpanFile :: RealSrcSpan -> FastString

srcSpanStartLine :: RealSrcSpan -> Int

srcSpanEndLine :: RealSrcSpan -> Int

srcSpanStartCol :: RealSrcSpan -> Int

srcSpanEndCol :: RealSrcSpan -> Int

## Predicates on SrcSpan

isGoodSrcSpan :: SrcSpan -> Bool

Test if a `SrcSpan` is good, i.e. has precise location information

isOneLineSpan :: SrcSpan -> Bool

True if the span is known to straddle only one line. For bad `SrcSpan`, it returns False

# Located

type Located e = GenLocated SrcSpan e

type RealLocated e = GenLocated RealSrcSpan e

data GenLocated l e

We attach SrcSpans to lots of things, so let's have a datatype for it.

Constructors

L l e |

Instances

Typeable2 GenLocated |
Functor (GenLocated l) |
(Eq l, Eq e) => Eq (GenLocated l e) |
(Data l, Data e) => Data (GenLocated l e) |
(Ord l, Ord e) => Ord (GenLocated l e) |
(Outputable l, Outputable e) => Outputable (GenLocated l e) |

## Constructing Located

noLoc :: e -> Located e

mkGeneralLocated :: String -> e -> Located e

## Deconstructing Located

getLoc :: GenLocated l e -> l

unLoc :: GenLocated l e -> e

## Combining and comparing Located values

eqLocated :: Eq a => Located a -> Located a -> Bool

Tests whether the two located things are equal

cmpLocated :: Ord a => Located a -> Located a -> Ordering

Tests the ordering of the two located things

combineLocs :: Located a -> Located b -> SrcSpan

addCLoc :: Located a -> Located b -> c -> Located c

Combine locations from two `Located` things and add them to a third thing

leftmost_smallest :: SrcSpan -> SrcSpan -> Ordering

Alternative strategies for ordering `SrcSpan`s

leftmost_largest :: SrcSpan -> SrcSpan -> Ordering

Alternative strategies for ordering `SrcSpan`s

rightmost :: SrcSpan -> SrcSpan -> Ordering

Alternative strategies for ordering `SrcSpan`s

spans :: SrcSpan -> (Int, Int) -> Bool

Determines whether a span encloses a given line and column index

isSubspanOf

Arguments

:: SrcSpan | The span that may be enclosed by the other
-> SrcSpan | The span it may be enclosed by
-> Bool |

Determines whether a span is enclosed by another one

sortLocated :: [Located a] -> [Located a]