!2      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           Safeloc = flip loc;A precedence parser that reads a single specific character.mnpo ckji   !^]\["l#vut$OUVNMSRPIHQKJLWT=<%&'.1()*+/0,234-86579:;>?FEDCBA@GXYZ_`abdefghqrswxyz{|}~mnpo ckji   !^]\["l#vut$OUVNMSRPIHQKJLWT=<%&'.1()*+/0,234-86579:;>?FEDCBA@GXYZ_`abdefghqrswxyz{|}~SafeVloc k m is the subset of  m whose keys are less than k.loc k m is the subset of  m whose keys are greater than k.loc k m is the subset of  m& whose keys are less than or equal to k.loc k m is the subset of  m) whose keys are greater than or equal to k. !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SafeSafe46_locList of length 1 or 2.locList of length 1locList of length 2loctoTuple (One 1) (1,Nothing)toTuple (Two 1 2) (1,Just 2)loctoTuple' (One 1) (Nothing,1)toTuple' (Two 1 2) (Just 1,2)Safe46!locList of length 0, 1, or 2.locList of length 0locList of length 1locList of length 2NoneM34locTypes that can be converted to *.!This class mostly exists so that 8 can be used in situations that would normally call for  (which we cannot use because  does not have an instance of ).loc stands for positive integer. You can also think of it as position:, because we use it to represent line and column numbers ( and ).e has instances of several of the standard numeric typeclasses, although many of the operations throw D" when non-positive values result.  does not have an 9 instance, because there is no sensible way to implement i.locposShowsPrec minPrec 1 """1"posShowsPrec minPrec 42 """42"loc%readPrec_to_S posReadPrec minPrec "1"[(1,"")]&readPrec_to_S posReadPrec minPrec "42" [(42,"")]%readPrec_to_S posReadPrec minPrec "0"[]&readPrec_to_S posReadPrec minPrec "-1"[]loctoEnum 3 :: Pos3toEnum 0 :: Pos#*** Exception: arithmetic underflowfromEnum (3 :: Pos)3locfromInteger 3 :: Pos3fromInteger 0 :: Pos#*** Exception: arithmetic underflow 2 + 3 :: Pos5 3 - 2 :: Pos1 3 - 3 :: Pos#*** Exception: arithmetic underflow 2 * 3 :: Pos6negate 3 :: Pos#*** Exception: arithmetic underflowNone:loc Stands for location. Consists of a  and a . You can think of a  like a caret position in a text editor. Following the normal convention for text editors and such, line and column numbers start with 1.loc"locShowsPrec minPrec (loc 3 14) """3:14"loc(readPrec_to_S locReadPrec minPrec "3:14" [(3:14,"")]loc Create a & from a line number and column number.locThe smallest location:  1 1.origin1:1loc\ = locv = None_llocA  consists of a start location () and an end location (x). The end location must be greater than the start location; in other words, empty or backwards spans are not permitted."Construct and combine spans using , , , and .loc<spanShowsPrec minPrec (fromTo (read "3:14") (read "6:5")) "" "3:14-6:5"loc-readPrec_to_S spanReadPrec minPrec "3:14-6:5"[(3:14-6:5,"")]-readPrec_to_S spanReadPrec minPrec "6:5-3:14"[(3:14-6:5,"")],readPrec_to_S spanReadPrec minPrec "6:5-6:5"[]locAttempt to construct a  from two ~s. The lesser loc will be the start, and the greater loc will be the end. The two locs must not be equal, or else this throws .%The safe version of this function is .locAttempt to construct a  from two ss. The lesser loc will be the start, and the greater loc will be the end. If the two locs are equal, the result is /!, because a span cannot be empty.This is the safe version of $, which throws an exception instead.loc%All of the lines that a span touches.)NonEmpty.toList (lines (read "2:6-2:10"))[2](NonEmpty.toList (lines (read "2:6-8:4"))[2,3,4,5,6,7,8]loc=Spans that are directly abutting do not count as overlapping..overlapping (read "1:5-1:8") (read "1:8-1:12")False.But these spans overlap by a single character:.overlapping (read "1:5-1:9") (read "1:8-1:12")TrueBSpans are overlapping if one is contained entirely within another./overlapping (read "1:5-1:15") (read "1:6-1:10")True,Spans are overlapping if they are identical./overlapping (read "1:5-1:15") (read "1:5-1:15")Trueloc=Determines whether the two spans touch any of the same lines.2linesOverlapping (read "1:1-1:2") (read "1:1-1:2")True2linesOverlapping (read "1:1-1:2") (read "1:1-2:1")True2linesOverlapping (read "1:1-1:2") (read "2:1-2:2")Falseloc{Two spans are considered to "touch" if they are overlapping or abutting; in other words, if there is no space between them.*touching (read "1:1-1:2") (read "1:2-1:3")True*touching (read "1:1-1:2") (read "1:1-1:3")True*touching (read "1:1-1:2") (read "1:3-1:4")Falseloc&join (read "1:1-1:2") (read "1:2-1:3")1:1-1:3&join (read "1:1-1:2") (read "1:1-1:3")1:1-1:3loc Combine two (s, merging them if they abut or overlap.read "1:1-1:2" + read "1:2-1:3" One 1:1-1:3read "1:1-1:2" + read "1:1-3:1" One 1:1-3:1 read "1:1-1:2" + read "1:1-11:1" One 1:1-11:1If the spans are not overlapping or abutting, they are returned unmodified in the same order in which they were given as parameters.read "1:1-1:2" + read "2:1-2:5"Two 1:1-1:2 2:1-2:5read "2:1-2:5" + read "1:1-1:2"Two 2:1-2:5 1:1-1:2locThe difference between two Spanss. a  b contains what is covered by a and not covered by b.read "2:5-4:1" - read "2:9-3:5"Two 2:5-2:9 3:5-4:1read "2:5-4:1" - read "2:5-3:5" One 3:5-4:1read "2:5-4:1" - read "2:2-3:5" One 3:5-4:1/Subtracting a thing from itself yields nothing.let x = read "2:5-4:1" in x - xZeroread "2:5-4:1" - read "2:2-4:4"Zeroread "1:1-8:1" - read "1:2-8:1" One 1:1-1:2locGiven an ascending list of 's, combine those which abut or overlap.loc\ = locv = loc A list of Spans sorted in ascending order.!This precondition is not checked. NoneXloc'A set of non-overlapping, non-abutting s. You may also think of an . like a span that can be empty or have gaps ."Construct and combine areas using , , , , and .loc'readPrec_to_S areaReadPrec minPrec "[]" [([],"")]7readPrec_to_S areaReadPrec minPrec "[3:2-5:5,8:3-11:4]"[([3:2-5:5,8:3-11:4],"")]7readPrec_to_S areaReadPrec minPrec "[3:2-5:5,11:4-8:3]"[([3:2-5:5,8:3-11:4],"")]6readPrec_to_S areaReadPrec minPrec "[3:2-5:5,8:3-8:3]"[]locConstruct a contiguous  consisting of a single  specified by two |s. The lesser loc will be the start, and the greater loc will be the end. If the two locs are equal, the area will be empty.loc Construct an  consisting of a single .spanArea (read "4:5-6:3") [4:5-6:3]locA  from  to , or / if the  is empty.areaSpan memptyNothingareaSpan (read "[3:4-7:2]") Just 3:4-7:2%areaSpan (read "[3:4-7:2,15:6-17:9]") Just 3:4-17:9locA list of the s that constitute an , sorted in ascending order.spansAsc mempty[]%spansAsc (read "[3:4-7:2,15:6-17:9]")[3:4-7:2,15:6-17:9]locspanCount mempty0spanCount (read "[3:4-7:2]")1&spanCount (read "[3:4-7:2,15:6-17:9]")2locThe first contiguous  in the , or / if the area is empty.firstSpan memptyNothingfirstSpan (read "[3:4-7:2]") Just 3:4-7:2&firstSpan (read "[3:4-7:2,15:6-17:9]") Just 3:4-7:2locThe last contiguous  in the , or / if the area is empty.lastSpan memptyNothinglastSpan (read "[3:4-7:2]") Just 3:4-7:2%lastSpan (read "[3:4-7:2,15:6-17:9]")Just 15:6-17:9locThe  at which the  starts, or / if the  is empty. start memptyNothingstart (read "[3:4-7:2]")Just 3:4"start (read "[3:4-7:2,15:6-17:9]")Just 3:4locThe  at which the  ends, or / if the  is empty. end memptyNothingend (read "[3:4-7:2]")Just 7:2 end (read "[3:4-7:2,15:6-17:9]") Just 17:9locThe union of two ;s. Spans that overlap or abut will be merged in the result.read "[1:1-1:2]" + mempty [1:1-1:2]#read "[1:1-1:2]" + read "[1:2-1:3]" [1:1-1:3]#read "[1:1-1:2]" + read "[1:1-3:1]" [1:1-3:1]$read "[1:1-1:2]" + read "[1:1-11:1]" [1:1-11:1]+read "[1:1-3:1,6:1-6:2]" + read "[1:1-6:1]" [1:1-6:2]#read "[1:1-3:1]" + read "[5:1-6:2]"[1:1-3:1,5:1-6:2]loc s a is the union of  a and  s.3addSpan (read "1:1-6:1") (read "[1:1-3:1,6:1-6:2]") [1:1-6:2]locThe difference between two s. a  b contains what is covered by a and not covered by b.loc s a is the subset of  a that is not covered by  s.loc = loc\ = locv = locStartlocEnd NoneP locThe smallest location:   1 1.This is an alias for . loc Create a & from a line number and column number.This is an alias for . locThis is an alias for . locThis is an alias for . locAttempt to construct a  from two ~s. The lesser loc will be the start, and the greater loc will be the end. The two locs must not be equal, or else this throws .%The safe version of this function is .This is an alias for .locAttempt to construct a  from two ss. The lesser loc will be the start, and the greater loc will be the end. If the two locs are equal, the result is /!, because a span cannot be empty.This is the safe version of  $, which throws an exception instead.This is an alias for .locConstruct a contiguous  consisting of a single  specified by two |s. The lesser loc will be the start, and the greater loc will be the end. If the two locs are equal, the area will be empty.This is an alias for .locThe union of two ;s. Spans that overlap or abut will be merged in the result.This is an alias for .locThe difference between two s. a `areaDifference' b contains what is covered by a and not covered by b.This is an alias for .locA list of the s that constitute an , sorted in ascending order.This is an alias for .loc Construct an  consisting of a single .This is an alias for .loc Combine two (s, merging them if they abut or overlap.This is an alias for .locThe difference between two Spanss. a - b contains what is covered by a and not covered by b.This is an alias for .locThis is an alias for .locThis is an alias for .locThis is an alias for .locThis is an alias for .           Nonen             ! " #$ #% #& '( ) * + , - . / 01 #2 3 45 67 #8 9: ;< = >?@?A?B CD EF?G?H?I EJ EK?L?M?N?O PQ PR PS PT UV 'W XY XZ X[ \] ^_ ^` ^a ^b ^c ^d ^e ^f ;g ;h ;i ;j ;k ;l ;m ;n ;o ;p ;q ;r ;s ;t ;u ;v ;w xy z{ z| 6} 6~ 6 6  # # # #     9 9 9 9 9 9                           ! " #    $  % & ' ( ) * + ,   - . / 0 1 2 3 4  5 6 7 8 9 :;<;w;=;>;?@A@BCDEFGHIJKLMNOPQRSoTUVWXYZ[\]^_`rstuabcdefghijklmnopqrstuvwxyz{|}~n "loc-0.1.3.8-FGGfGFtouM2AxGWVeXUXe8Data.Loc.Internal.PreludeData.Loc.Internal.MapData.Loc.ExceptionData.Loc.List.OneToTwoData.Loc.List.ZeroToTwo Data.Loc.Pos Data.Loc.Loc Data.Loc.Span Data.Loc.AreaData.LocData.Loc.Typesbase System.IOprint Data.TuplefstsndGHC.Base otherwise$GHC.EnumenumFrom enumFromThen enumFromToenumFromThenToghc-prim GHC.Classes==>=fail>>=>>fmapreturnGHC.Real fromIntegral toInteger toRational Control.Monadguard<>memptymappendmconcat<*>pure*>EnumEqIntegralMonadFunctorOrdGHC.ReadReadRealGHC.ShowShow Data.FoldableFoldable SemigroupMonoid GHC.TypesBoolDoubleInt GHC.NaturalNatural GHC.MaybeMaybeOrderingIOFalseNothingJustTrueLTEQGTData.Bifunctorsecondfirstbimap Bifunctor System.Exit exitFailuremfilterData.Traversable mapAccumL sequenceAtraverse GHC.ExceptionthrowGHC.Exception.Type ExceptionRatioZeroDenominatorDenormal DivideByZeroLossOfPrecision UnderflowOverflowArithException traverse_productsumminimummaximumelemlengthnulltoListfoldl1foldr1foldl'foldlfoldr'foldrfoldMapfold Text.ReadreadControl.Category>>><<< readListPrecreadPrecreadList readsPrecText.ParserCombinators.ReadPrec readPrec_to_S readP_to_PrecminPrecReadPrec GHC.Floatsqrt Data.Function&on Data.Functorvoid$><$>quotRemdiv/roundfromEnumtoEnumpredsucc showStringshowsShowSshowListshow showsPrec Data.Maybe catMaybes fromMaybemaybeflip.constidwhenstimessconcat<$<*empty:|NonEmptyStringGHC.Err undefined/=<=compare&&||not<>maxmincontainers-0.6.0.1Data.Map.InternalMapData.Set.InternalSet<&> readPrecCharbelowabovebelowInclusiveaboveInclusive LocException EmptySpan$fShowLocException$fExceptionLocException$fEqLocException$fOrdLocExceptionOneToTwoOneTwotoTupletoTuple' $fEqOneToTwo $fOrdOneToTwo$fShowOneToTwo$fReadOneToTwo$fFoldableOneToTwo$fFunctorOneToTwo ZeroToTwoZero $fEqZeroToTwo$fOrdZeroToTwo$fShowZeroToTwo$fReadZeroToTwo$fFoldableZeroToTwo$fFunctorZeroToTwoColumnLineToNattoNatPos posShowsPrec posReadPrec $fEnumPos $fRealPos$fNumPos $fReadPos $fShowPos $fToNatPos $fReadLine $fShowLine $fReadColumn $fShowColumn$fEqPos$fOrdPos$fEqLine $fOrdLine $fNumLine $fRealLine $fEnumLine $fToNatLine $fEqColumn $fOrdColumn $fNumColumn $fRealColumn $fEnumColumn $fToNatColumnLoclinecolumn locShowsPrec locReadPreclocorigin $fReadLoc $fShowLoc$fEqLoc$fOrdLocSpanstartend spanShowsPrec spanReadPrecfromTo fromToMaylines overlappinglinesOverlappingtouchingjoin+-joinAsc $fReadSpan $fShowSpan$fEqSpan $fOrdSpanArea areaShowsPrec areaReadPrecspanAreaareaSpanspansAsc spanCount firstSpanlastSpanaddSpan$fSemigroupArea $fMonoidArea $fReadArea $fShowArea $fEqTerminus $fOrdTerminus$fEqArea $fOrdArealocLine locColumn spanFromTo spanFromToMay areaFromTo areaUnionareaDifference areaSpansAsc spanUnionspanDifference spanStartspanEnd areaStartareaEndData.Map foldWithKeyinsertLookupWithKey'insertWithKey' insertWith'$Data.Map.Internal.DeprecatedShowTree showTreeWithshowTreeData.Map.Internal.Debugvalid splitRoot deleteFindMax deleteFindMin splitLookupsplitfromDistinctDescListfromDistinctAscListfromDescListWithKeyfromAscListWithKeyfromDescListWithfromAscListWith fromDescList fromAscList toDescList toAscListfromListWithKey fromListWithfromListfromSetkeysSetassocskeyselemsfoldMapWithKey foldlWithKey' foldlWithKey foldrWithKey' foldrWithKeymapKeysMonotonic mapKeysWithmapKeysmapAccumRWithKeymapAccumWithKeymapAccumtraverseWithKey mapWithKeymapmapEitherWithKey mapEithertraverseMaybeWithKeymapMaybeWithKeymapMaybepartitionWithKey partition spanAntitonedropWhileAntitonetakeWhileAntitone filterWithKeyfilterisProperSubmapOfByisProperSubmapOf isSubmapOfBy isSubmapOf mergeWithKeyintersectionWithKeyintersectionWith restrictKeys intersectiondifferenceWithKeydifferenceWith withoutKeys difference unionWithKey unionWithunion unionsWithunionsmaxViewminViewmaxViewWithKeyminViewWithKeyupdateMaxWithKeyupdateMinWithKey updateMax updateMin deleteMax deleteMinfindMax lookupMaxfindMin lookupMindeleteAtupdateAtsplitAtdroptakeelemAt lookupIndex findIndexalterFalterupdateLookupWithKey updateWithKeyupdate adjustWithKeyadjustdeleteinsertLookupWithKey insertWithKey insertWithinsert singletonlookupGElookupLElookupGTlookupLTfindWithDefault notMembermemberlookupsize\\!?! subtractSpan