Language.Haskell.Exts.SrcLoc

haskell-src-exts-1.18.2: Manipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer

Copyright | (c) Niklas Broberg 2009
License | BSD-style (see the file LICENSE.txt)
Maintainer | Niklas Broberg, d00nibro@chalmers.se
Stability | stable
Portability | portable
Safe Haskell | Safe
Language | Haskell98

Language.Haskell.Exts.SrcLoc

Description

This module defines various data types representing source location information, of varying degree of preciseness.

Synopsis

- data SrcLoc = SrcLoc {
  - srcFilename :: String
  - srcLine :: Int
  - srcColumn :: Int
  }
- noLoc :: SrcLoc
- data SrcSpan = SrcSpan {
  - srcSpanFilename :: String
  - srcSpanStartLine :: Int
  - srcSpanStartColumn :: Int
  - srcSpanEndLine :: Int
  - srcSpanEndColumn :: Int
  }
- srcSpanStart :: SrcSpan -> (Int, Int)
- srcSpanEnd :: SrcSpan -> (Int, Int)
- mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan
- mergeSrcSpan :: SrcSpan -> SrcSpan -> SrcSpan
- isNullSpan :: SrcSpan -> Bool
- spanSize :: SrcSpan -> (Int, Int)
- data Loc a = Loc {
  - loc :: SrcSpan
  - unLoc :: a
  }
- data SrcSpanInfo = SrcSpanInfo {
  - srcInfoSpan :: SrcSpan
  - srcInfoPoints :: [SrcSpan]
  }
- noInfoSpan :: SrcSpan -> SrcSpanInfo
- noSrcSpan :: SrcSpanInfo
- infoSpan :: SrcSpan -> [SrcSpan] -> SrcSpanInfo
- combSpanInfo :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
- combSpanMaybe :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo
- (<++>) :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
- (<+?>) :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo
- (<?+>) :: Maybe SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
- (<**) :: SrcSpanInfo -> [SrcSpan] -> SrcSpanInfo
- (<^^>) :: SrcSpan -> SrcSpan -> SrcSpanInfo
- class SrcInfo si where

# Documentation

data SrcLoc #

A single position in the source.

Constructors

SrcLoc |
Fields srcFilename :: String srcLine :: Int srcColumn :: Int

Instances

Eq SrcLoc # |
Methods (==) :: SrcLoc -> SrcLoc -> Bool # (/=) :: SrcLoc -> SrcLoc -> Bool #
Data SrcLoc # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SrcLoc -> c SrcLoc # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SrcLoc # toConstr :: SrcLoc -> Constr # dataTypeOf :: SrcLoc -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c SrcLoc) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcLoc) # gmapT :: (forall b. Data b => b -> b) -> SrcLoc -> SrcLoc # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r # gmapQ :: (forall d. Data d => d -> u) -> SrcLoc -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> SrcLoc -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc #
Ord SrcLoc # |
Methods compare :: SrcLoc -> SrcLoc -> Ordering # (<) :: SrcLoc -> SrcLoc -> Bool # (<=) :: SrcLoc -> SrcLoc -> Bool # (>) :: SrcLoc -> SrcLoc -> Bool # (>=) :: SrcLoc -> SrcLoc -> Bool # max :: SrcLoc -> SrcLoc -> SrcLoc # min :: SrcLoc -> SrcLoc -> SrcLoc #
Show SrcLoc # |
Methods showsPrec :: Int -> SrcLoc -> ShowS # show :: SrcLoc -> String # showList :: [SrcLoc] -> ShowS #
Generic SrcLoc # |
Associated Types type Rep SrcLoc :: * -> * # Methods from :: SrcLoc -> Rep SrcLoc x # to :: Rep SrcLoc x -> SrcLoc #
SrcInfo SrcLoc # |
Methods toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcLoc # fromSrcInfo :: SrcSpanInfo -> SrcLoc # getPointLoc :: SrcLoc -> SrcLoc # fileName :: SrcLoc -> String # startLine :: SrcLoc -> Int # startColumn :: SrcLoc -> Int #
Pretty SrcLoc # |
Methods pretty :: SrcLoc -> Doc prettyPrec :: Int -> SrcLoc -> Doc
type Rep SrcLoc # |
type Rep SrcLoc = D1 (MetaData "SrcLoc" "Language.Haskell.Exts.SrcLoc" "haskell-src-exts-1.18.2-HHC3x3A3NPPIRZVmSBLAjX" False) (C1 (MetaCons "SrcLoc" PrefixI True) ((:*:) (S1 (MetaSel (Just Symbol "srcFilename") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String)) ((:*:) (S1 (MetaSel (Just Symbol "srcLine") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Int)) (S1 (MetaSel (Just Symbol "srcColumn") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Int)))))

noLoc :: SrcLoc #

data SrcSpan #

A portion of the source, spanning one or more lines and zero or more columns.

Constructors

SrcSpan |
Fields srcSpanFilename :: String srcSpanStartLine :: Int srcSpanStartColumn :: Int srcSpanEndLine :: Int srcSpanEndColumn :: Int

Instances

Eq SrcSpan # |
Methods (==) :: SrcSpan -> SrcSpan -> Bool # (/=) :: SrcSpan -> SrcSpan -> Bool #
Data SrcSpan # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SrcSpan -> c SrcSpan # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SrcSpan # toConstr :: SrcSpan -> Constr # dataTypeOf :: SrcSpan -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c SrcSpan) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcSpan) # gmapT :: (forall b. Data b => b -> b) -> SrcSpan -> SrcSpan # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SrcSpan -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcSpan -> r # gmapQ :: (forall d. Data d => d -> u) -> SrcSpan -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> SrcSpan -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan #
Ord SrcSpan # |
Methods compare :: SrcSpan -> SrcSpan -> Ordering # (<) :: SrcSpan -> SrcSpan -> Bool # (<=) :: SrcSpan -> SrcSpan -> Bool # (>) :: SrcSpan -> SrcSpan -> Bool # (>=) :: SrcSpan -> SrcSpan -> Bool # max :: SrcSpan -> SrcSpan -> SrcSpan # min :: SrcSpan -> SrcSpan -> SrcSpan #
Show SrcSpan # |
Methods showsPrec :: Int -> SrcSpan -> ShowS # show :: SrcSpan -> String # showList :: [SrcSpan] -> ShowS #
SrcInfo SrcSpan # |
Methods toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcSpan # fromSrcInfo :: SrcSpanInfo -> SrcSpan # getPointLoc :: SrcSpan -> SrcLoc # fileName :: SrcSpan -> String # startLine :: SrcSpan -> Int # startColumn :: SrcSpan -> Int #
Pretty SrcSpan # |
Methods pretty :: SrcSpan -> Doc prettyPrec :: Int -> SrcSpan -> Doc

srcSpanStart :: SrcSpan -> (Int, Int) #

Returns `srcSpanStartLine` and `srcSpanStartColumn` in a pair.

srcSpanEnd :: SrcSpan -> (Int, Int) #

Returns `srcSpanEndLine` and `srcSpanEndColumn` in a pair.

mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan #

Combine two locations in the source to denote a span.

mergeSrcSpan :: SrcSpan -> SrcSpan -> SrcSpan #

Merge two source spans into a single span from the start of the first to the end of the second. Assumes that the two spans relate to the same source file.

isNullSpan :: SrcSpan -> Bool #

Test if a given span starts and ends at the same location.

spanSize :: SrcSpan -> (Int, Int) #

data Loc a #

An entity located in the source.

Constructors

Loc |
Fields loc :: SrcSpan unLoc :: a

Instances

Eq a => Eq (Loc a) # |
Methods (==) :: Loc a -> Loc a -> Bool # (/=) :: Loc a -> Loc a -> Bool #
Ord a => Ord (Loc a) # |
Methods compare :: Loc a -> Loc a -> Ordering # (<) :: Loc a -> Loc a -> Bool # (<=) :: Loc a -> Loc a -> Bool # (>) :: Loc a -> Loc a -> Bool # (>=) :: Loc a -> Loc a -> Bool # max :: Loc a -> Loc a -> Loc a # min :: Loc a -> Loc a -> Loc a #
Show a => Show (Loc a) # |
Methods showsPrec :: Int -> Loc a -> ShowS # show :: Loc a -> String # showList :: [Loc a] -> ShowS #

data SrcSpanInfo #

A portion of the source, extended with information on the position of entities within the span.

Constructors

SrcSpanInfo |
Fields srcInfoSpan :: SrcSpan srcInfoPoints :: [SrcSpan]

Instances

Eq SrcSpanInfo # |
Methods (==) :: SrcSpanInfo -> SrcSpanInfo -> Bool # (/=) :: SrcSpanInfo -> SrcSpanInfo -> Bool #
Data SrcSpanInfo # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SrcSpanInfo -> c SrcSpanInfo # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SrcSpanInfo # toConstr :: SrcSpanInfo -> Constr # dataTypeOf :: SrcSpanInfo -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c SrcSpanInfo) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcSpanInfo) # gmapT :: (forall b. Data b => b -> b) -> SrcSpanInfo -> SrcSpanInfo # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r # gmapQ :: (forall d. Data d => d -> u) -> SrcSpanInfo -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> SrcSpanInfo -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo #
Ord SrcSpanInfo # |
Methods compare :: SrcSpanInfo -> SrcSpanInfo -> Ordering # (<) :: SrcSpanInfo -> SrcSpanInfo -> Bool # (<=) :: SrcSpanInfo -> SrcSpanInfo -> Bool # (>) :: SrcSpanInfo -> SrcSpanInfo -> Bool # (>=) :: SrcSpanInfo -> SrcSpanInfo -> Bool # max :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo # min :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo #
Show SrcSpanInfo # |
Methods showsPrec :: Int -> SrcSpanInfo -> ShowS # show :: SrcSpanInfo -> String # showList :: [SrcSpanInfo] -> ShowS #
SrcInfo SrcSpanInfo # |
Methods toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcSpanInfo # fromSrcInfo :: SrcSpanInfo -> SrcSpanInfo # getPointLoc :: SrcSpanInfo -> SrcLoc # fileName :: SrcSpanInfo -> String # startLine :: SrcSpanInfo -> Int # startColumn :: SrcSpanInfo -> Int #
Parseable (NonGreedy (ListOf (ModulePragma SrcSpanInfo))) # |
Methods parse :: String -> ParseResult (NonGreedy (ListOf (ModulePragma SrcSpanInfo))) # parseWithMode :: ParseMode -> String -> ParseResult (NonGreedy (ListOf (ModulePragma SrcSpanInfo))) # parseWithComments :: ParseMode -> String -> ParseResult (NonGreedy (ListOf (ModulePragma SrcSpanInfo)), [Comment]) # parser :: Maybe [Fixity] -> P (NonGreedy (ListOf (ModulePragma SrcSpanInfo)))
Parseable (NonGreedy (ModuleHeadAndImports SrcSpanInfo)) # |
Methods parse :: String -> ParseResult (NonGreedy (ModuleHeadAndImports SrcSpanInfo)) # parseWithMode :: ParseMode -> String -> ParseResult (NonGreedy (ModuleHeadAndImports SrcSpanInfo)) # parseWithComments :: ParseMode -> String -> ParseResult (NonGreedy (ModuleHeadAndImports SrcSpanInfo), [Comment]) # parser :: Maybe [Fixity] -> P (NonGreedy (ModuleHeadAndImports SrcSpanInfo))
Parseable (NonGreedy (PragmasAndModuleHead SrcSpanInfo)) # |
Methods parse :: String -> ParseResult (NonGreedy (PragmasAndModuleHead SrcSpanInfo)) # parseWithMode :: ParseMode -> String -> ParseResult (NonGreedy (PragmasAndModuleHead SrcSpanInfo)) # parseWithComments :: ParseMode -> String -> ParseResult (NonGreedy (PragmasAndModuleHead SrcSpanInfo), [Comment]) # parser :: Maybe [Fixity] -> P (NonGreedy (PragmasAndModuleHead SrcSpanInfo))
Parseable (NonGreedy (PragmasAndModuleName SrcSpanInfo)) # |
Methods parse :: String -> ParseResult (NonGreedy (PragmasAndModuleName SrcSpanInfo)) # parseWithMode :: ParseMode -> String -> ParseResult (NonGreedy (PragmasAndModuleName SrcSpanInfo)) # parseWithComments :: ParseMode -> String -> ParseResult (NonGreedy (PragmasAndModuleName SrcSpanInfo), [Comment]) # parser :: Maybe [Fixity] -> P (NonGreedy (PragmasAndModuleName SrcSpanInfo))

noInfoSpan :: SrcSpan -> SrcSpanInfo #

Generate a `SrcSpanInfo` with no positional information for entities.

noSrcSpan :: SrcSpanInfo #

A bogus `SrcSpanInfo`, the location is `noLoc`. `noSrcSpan = noInfoSpan (mkSrcSpan noLoc noLoc)`

infoSpan :: SrcSpan -> [SrcSpan] -> SrcSpanInfo #

Generate a `SrcSpanInfo` with the supplied positional information for entities.

combSpanInfo :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo #

Combine two `SrcSpanInfo`s into one that spans the combined source area of the two arguments, leaving positional information blank.

combSpanMaybe :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo #

Like '(+?)', but it also concatenates the `srcInfoPoints`.

(<++>) :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo infixl 5 #

Short name for `combSpanInfo`

(<+?>) :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo infixl 4 #

Optionally combine the first argument with the second, or return it unchanged if the second argument is `Nothing`.

(<?+>) :: Maybe SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo infixl 4 #

Optionally combine the second argument with the first, or return it unchanged if the first argument is `Nothing`.

(<**) :: SrcSpanInfo -> [SrcSpan] -> SrcSpanInfo infixl 4 #

Add more positional information for entities of a span.

(<^^>) :: SrcSpan -> SrcSpan -> SrcSpanInfo infixl 6 #

Merge two `SrcSpan`s and lift them to a `SrcInfoSpan` with no positional information for entities.

class SrcInfo si where #

A class to work over all kinds of source location information.

Minimal complete definition

toSrcInfo, fromSrcInfo, fileName, startLine, startColumn

Methods

toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> si #

fromSrcInfo :: SrcSpanInfo -> si #

getPointLoc :: si -> SrcLoc #

fileName :: si -> String #

startLine :: si -> Int #

startColumn :: si -> Int #

Instances

SrcInfo SrcSpanInfo # |
Methods toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcSpanInfo # fromSrcInfo :: SrcSpanInfo -> SrcSpanInfo # getPointLoc :: SrcSpanInfo -> SrcLoc # fileName :: SrcSpanInfo -> String # startLine :: SrcSpanInfo -> Int # startColumn :: SrcSpanInfo -> Int #
SrcInfo SrcSpan # |
Methods toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcSpan # fromSrcInfo :: SrcSpanInfo -> SrcSpan # getPointLoc :: SrcSpan -> SrcLoc # fileName :: SrcSpan -> String # startLine :: SrcSpan -> Int # startColumn :: SrcSpan -> Int #
SrcInfo SrcLoc # |
Methods toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcLoc # fromSrcInfo :: SrcSpanInfo -> SrcLoc # getPointLoc :: SrcLoc -> SrcLoc # fileName :: SrcLoc -> String # startLine :: SrcLoc -> Int # startColumn :: SrcLoc -> Int #