Safe Haskell | None |
---|
Position information for syntax. Crucial for giving good error messages.
- type Position = Position' SrcFile
- data Position' a = Pn {}
- positionInvariant :: Position' a -> Bool
- startPos :: Maybe AbsolutePath -> Position
- movePos :: Position' a -> Char -> Position' a
- movePosByString :: Position' a -> String -> Position' a
- backupPos :: Position' a -> Position' a
- type Interval = Interval' SrcFile
- data Interval' a = Interval {}
- intervalInvariant :: Ord a => Interval' a -> Bool
- takeI :: String -> Interval' a -> Interval' a
- dropI :: String -> Interval' a -> Interval' a
- type Range = Range' SrcFile
- newtype Range' a = Range [Interval' a]
- rangeInvariant :: Range -> Bool
- rightMargin :: Range -> Range
- noRange :: Range' a
- posToRange :: Ord a => Position' a -> Position' a -> Range' a
- rStart :: Range' a -> Maybe (Position' a)
- rEnd :: Range' a -> Maybe (Position' a)
- rangeToInterval :: Range' a -> Maybe (Interval' a)
- continuous :: Range' a -> Range' a
- continuousPerLine :: Ord a => Range' a -> Range' a
- class HasRange t where
- class HasRange t => SetRange t where
- class KillRange a where
- killRange :: KillRangeT a
- type KillRangeT a = a -> a
- killRange1 :: KillRange a => (a -> t) -> a -> t
- killRange2 :: (KillRange a, KillRange a1) => (a1 -> a -> t) -> a1 -> a -> t
- killRange3 :: (KillRange a, KillRange a1, KillRange a2) => (a2 -> a1 -> a -> t) -> a2 -> a1 -> a -> t
- killRange4 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3) => (a3 -> a2 -> a1 -> a -> t) -> a3 -> a2 -> a1 -> a -> t
- killRange5 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4) => (a4 -> a3 -> a2 -> a1 -> a -> t) -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange6 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5) => (a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange7 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6) => (a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange8 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7) => (a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange9 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8) => (a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange10 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9) => (a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange11 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10) => (a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange12 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11) => (a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange13 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12) => (a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange14 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13) => (a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange15 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14) => (a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange16 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15) => (a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange17 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15, KillRange a16) => (a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange18 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15, KillRange a16, KillRange a17) => (a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- killRange19 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15, KillRange a16, KillRange a17, KillRange a18) => (a18 -> a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a18 -> a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- withRangeOf :: (SetRange t, HasRange u) => t -> u -> t
- fuseRange :: (HasRange u, HasRange t) => u -> t -> Range
- fuseRanges :: Ord a => Range' a -> Range' a -> Range' a
- 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
.
positionInvariant :: Position' a -> BoolSource
startPos :: Maybe AbsolutePath -> PositionSource
The first position in a file: position 1, line 1, column 1.
movePos :: Position' a -> Char -> Position' aSource
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.
movePosByString :: Position' a -> String -> Position' aSource
Advance the position by a string.
movePosByString = foldl' movePos
backupPos :: Position' a -> Position' aSource
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
.
Functor Interval' | |
Typeable1 Interval' | |
Foldable Interval' | |
Traversable Interval' | |
HasRange Interval | |
PrettyTCM Interval | |
EmbPrj Interval | |
Eq a => Eq (Interval' a) | |
Ord a => Ord (Interval' a) | |
Read a => Read (Interval' a) | |
Show (Interval' Integer) | |
Show a => Show (Interval' (Maybe a)) | |
(Arbitrary a, Ord a) => Arbitrary (Interval' a) |
intervalInvariant :: Ord a => Interval' a -> BoolSource
takeI :: String -> Interval' a -> Interval' aSource
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.
dropI :: String -> Interval' a -> Interval' aSource
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
.
Functor Range' | |
Typeable1 Range' | |
Foldable Range' | |
Traversable Range' | |
KillRange Range | |
SetRange Range | |
HasRange Range | |
GenC Range | |
PrettyTCM Range | |
EmbPrj Range | |
Eq a => Eq (Range' a) | |
Ord a => Ord (Range' a) | |
Read a => Read (Range' a) | |
Show (Range' Integer) | |
Show a => Show (Range' (Maybe a)) | |
(Ord a, Arbitrary a) => Arbitrary (Range' a) |
rangeInvariant :: Range -> BoolSource
rightMargin :: Range -> RangeSource
Conflate a range to its right margin.
posToRange :: Ord a => Position' a -> Position' a -> Range' aSource
Converts two positions to a range.
rEnd :: Range' a -> Maybe (Position' a)Source
The position after the final position in the range, if any.
rangeToInterval :: Range' a -> Maybe (Interval' a)Source
Converts a range to an interval, if possible.
continuous :: Range' a -> Range' aSource
Returns the shortest continuous range containing the given one.
continuousPerLine :: Ord a => Range' a -> Range' aSource
Removes gaps between intervals on the same line.
Things that have a range are instances of this class.
class HasRange t => SetRange t whereSource
If it is also possible to set the range, this is the class.
Killing the range of an object sets all range information to noRange
.
type KillRangeT a = a -> aSource
killRange1 :: KillRange a => (a -> t) -> a -> tSource
killRange2 :: (KillRange a, KillRange a1) => (a1 -> a -> t) -> a1 -> a -> tSource
killRange3 :: (KillRange a, KillRange a1, KillRange a2) => (a2 -> a1 -> a -> t) -> a2 -> a1 -> a -> tSource
killRange4 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3) => (a3 -> a2 -> a1 -> a -> t) -> a3 -> a2 -> a1 -> a -> tSource
killRange5 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4) => (a4 -> a3 -> a2 -> a1 -> a -> t) -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange6 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5) => (a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange7 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6) => (a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange8 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7) => (a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange9 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8) => (a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange10 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9) => (a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange11 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10) => (a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange12 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11) => (a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange13 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12) => (a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange14 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13) => (a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange15 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14) => (a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange16 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15) => (a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange17 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15, KillRange a16) => (a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange18 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15, KillRange a16, KillRange a17) => (a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
killRange19 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6, KillRange a7, KillRange a8, KillRange a9, KillRange a10, KillRange a11, KillRange a12, KillRange a13, KillRange a14, KillRange a15, KillRange a16, KillRange a17, KillRange a18) => (a18 -> a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a18 -> a17 -> a16 -> a15 -> a14 -> a13 -> a12 -> a11 -> a10 -> a9 -> a8 -> a7 -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> tSource
withRangeOf :: (SetRange t, HasRange u) => t -> u -> tSource
x `withRangeOf` y
sets the range of x
to the range of y
.
fuseRanges :: Ord a => Range' a -> Range' a -> Range' aSource
fuseRanges r r'
unions the ranges r
and r'
.
Meaning it finds the least range r0
that covers r
and r'
.
beginningOf :: Range -> RangeSource
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 :: Range -> RangeSource
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.