|
|
|
|
|
Description |
Position information for syntax. Crucial for giving good error messages.
|
|
Synopsis |
|
data Position = Pn {} | | positionInvariant :: Position -> Bool | | startPos :: Maybe AbsolutePath -> Position | | movePos :: Position -> Char -> Position | | movePosByString :: Position -> String -> Position | | backupPos :: Position -> Position | | data Interval = Interval {} | | intervalInvariant :: Interval -> Bool | | takeI :: String -> Interval -> Interval | | dropI :: String -> Interval -> Interval | | newtype Range = Range [Interval] | | rangeInvariant :: Range -> Bool | | noRange :: Range | | posToRange :: Position -> Position -> Range | | rStart :: Range -> Maybe Position | | rEnd :: Range -> Maybe Position | | rangeToInterval :: Range -> Maybe Interval | | continuous :: Range -> Range | | continuousPerLine :: Range -> Range | | class HasRange t where | | | class HasRange t => SetRange t where | | | class KillRange a where | | | killRange1 :: KillRange a => (a -> t) -> a -> t | | killRange2 :: (KillRange a, KillRange a1) => (a -> a1 -> t) -> a -> a1 -> t | | killRange3 :: (KillRange a, KillRange a1, KillRange a2) => (a -> a1 -> a2 -> t) -> a -> a1 -> a2 -> t | | killRange4 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3) => (a -> a1 -> a2 -> a3 -> t) -> a -> a1 -> a2 -> a3 -> t | | killRange5 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4) => (a -> a1 -> a2 -> a3 -> a4 -> t) -> a -> a1 -> a2 -> a3 -> a4 -> t | | killRange6 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5) => (a -> a1 -> a2 -> a3 -> a4 -> a5 -> t) -> a -> a1 -> a2 -> a3 -> a4 -> a5 -> t | | killRange7 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6) => (a -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> t) -> a -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> t | | withRangeOf :: (SetRange t, HasRange u) => t -> u -> t | | fuseRange :: (HasRange u, HasRange t) => u -> t -> Range | | fuseRanges :: Range -> Range -> Range | | beginningOf :: Range -> Range | | beginningOfFile :: Range -> Range | | tests :: IO Bool |
|
|
|
Positions
|
|
|
Represents a point in the input.
If two positions have the same srcFile and posPos components,
then the final two components should be the same as well, but since
this can be hard to enforce the program should not rely too much on
the last two components; they are mainly there to improve error
messages for the user.
Note the invariant which positions have to satisfy: positionInvariant.
| Constructors | |
|
|
|
|
|
The first position in a file: position 1, line 1, column 1.
|
|
|
Advance the position by one character.
A newline character ('\n') moves the position to the first
character in the next line. Any other character moves the
position to the next column.
|
|
|
Advance the position by a string.
movePosByString = foldl' movePos
|
|
|
Backup the position by one character.
Precondition: The character must not be '\n'.
|
|
Intervals
|
|
|
An interval. The iEnd position is not included in the interval.
Note the invariant which intervals have to satisfy: intervalInvariant.
| Constructors | |
|
|
|
|
|
Extracts the interval corresponding to the given string, assuming
that the string starts at the beginning of the given interval.
Precondition: The string must not be too long for the interval.
|
|
|
Removes the interval corresponding to the given string from the
given interval, assuming that the string starts at the beginning of
the interval.
Precondition: The string must not be too long for the interval.
|
|
Ranges
|
|
|
A range is a list of intervals. The intervals should be
consecutive and separated.
Note the invariant which ranges have to satisfy: rangeInvariant.
| Constructors | |
|
|
|
|
|
Ranges between two unknown positions
|
|
|
Converts two positions to a range.
|
|
|
The initial position in the range, if any.
|
|
|
The position after the final position in the range, if any.
|
|
|
Converts a range to an interval, if possible.
|
|
|
Returns the shortest continuous range containing the given one.
|
|
|
Removes gaps between intervals on the same line.
|
|
|
Things that have a range are instances of this class.
| | Methods | |
|
|
|
If it is also possible to set the range, this is the class.
Instances should satisfy getRange (setRange r x) == r.
| | Methods | |
|
|
|
Killing the range of an object sets all range information to noRange.
| | Methods | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x withRangeOf y sets the range of x to the range of y.
|
|
|
|
|
Finds a range which covers the arguments.
|
|
|
beginningOf r is an empty range (a single, empty interval)
positioned at the beginning of r. If r does not have a
beginning, then noRange is returned.
|
|
|
beginningOfFile r is an empty range (a single, empty interval)
at the beginning of r's starting position's file. If there is no
such position, then an empty range is returned.
|
|
Tests
|
|
|
Test suite.
|
|
Produced by Haddock version 2.6.1 |