input-parsers 0.2 → 0.2.1
raw patch · 4 files changed
+20/−14 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Text.Parser.Input.Position: instance Text.Parser.Input.Position.Position a => Text.Parser.Input.Position.Position (Data.Semigroup.Internal.Dual a)
+ Text.Parser.Input.Position: instance Text.Parser.Input.Position.Position a => Text.Parser.Input.Position.Position (Data.Ord.Down a)
- Text.Parser.Input: getSourcePos :: (InputParsing m, FactorialMonoid (ParserInput m), Functor m, ParserPosition m ~ Dual Int) => m (ParserPosition m)
+ Text.Parser.Input: getSourcePos :: (InputParsing m, FactorialMonoid (ParserInput m), Functor m, ParserPosition m ~ Down Int) => m (ParserPosition m)
- Text.Parser.Input: type ParserPosition m = Dual Int;
+ Text.Parser.Input: type ParserPosition m = Down Int;
- Text.Parser.Input.Position: class Position p
+ Text.Parser.Input.Position: class Ord p => Position p
- Text.Parser.Input.Position: fromEnd :: Int -> Dual Int
+ Text.Parser.Input.Position: fromEnd :: Int -> Down Int
Files
- CHANGELOG.md +5/−1
- input-parsers.cabal +1/−1
- src/Text/Parser/Input.hs +4/−3
- src/Text/Parser/Input/Position.hs +10/−9
CHANGELOG.md view
@@ -1,8 +1,12 @@ # Revision history for input-parsers +## 0.2.1 -- 2021-03-09++* Changed the default instance of `ParserPosition`, made `Position` a subclass of `Ord`.+ ## 0.2 -- 2021-03-07 -* Added `ParserPosition` and made `Position` a class.+* Added `ParserPosition` and made `Position` a class. Deprecated. ## 0.1.0.1 -- 2020-07-19
input-parsers.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: input-parsers-version: 0.2+version: 0.2.1 synopsis: Extension of the parsers library with more capability and efficiency description: Extended version of the parsers library, with the additional classes providing more
src/Text/Parser/Input.hs view
@@ -27,7 +27,8 @@ import qualified Control.Monad.Trans.RWS.Strict as Strict (RWST(RWST)) import Data.Functor ((<$>)) import qualified Data.List as List-import Data.Monoid (Monoid, Dual, mappend, mempty)+import Data.Ord (Down)+import Data.Monoid (Monoid, mappend, mempty) import Data.String (IsString (fromString)) import Text.ParserCombinators.ReadP (ReadP) import qualified Text.ParserCombinators.ReadP as ReadP@@ -122,8 +123,8 @@ -- version of 'concat' @.@ 'Control.Applicative.some' @.@ 'satisfy'. takeWhile1 :: (ParserInput m -> Bool) -> m (ParserInput m) - type ParserPosition m = Dual Int- default getSourcePos :: (FactorialMonoid (ParserInput m), Functor m, ParserPosition m ~ Dual Int)+ type ParserPosition m = Down Int+ default getSourcePos :: (FactorialMonoid (ParserInput m), Functor m, ParserPosition m ~ Down Int) => m (ParserPosition m) getSourcePos = fromEnd . Factorial.length <$> getInput anyToken = take 1
src/Text/Parser/Input/Position.hs view
@@ -7,16 +7,17 @@ import Data.Char (isSpace) import Data.String (IsString(fromString))-import Data.Monoid (Dual(Dual))+import Data.Ord (Down(Down)) import qualified Data.Monoid.Factorial as Factorial import qualified Data.Monoid.Textual as Textual import Data.Monoid.Factorial (FactorialMonoid) import Data.Monoid.Textual (TextualMonoid) --- | A class for representing position values.+-- | A class for representing position values. The methods satisfy these laws: -- -- > move (distance pos1 pos2) pos1 == pos2-class Position p where+-- > (pos1 < pos2) == (distance pos1 pos2 > 0)+class Ord p => Position p where -- | Distance from the first position to the second distance :: p -> p -> Int -- | Move the position by the given distance.@@ -29,18 +30,18 @@ move = (+) offset = const id -instance Position a => Position (Dual a) where- distance (Dual p1) (Dual p2) = distance p2 p1- move distance (Dual p) = Dual (move (negate distance) p)- offset wholeInput (Dual p) = Factorial.length wholeInput - offset wholeInput p+instance Position a => Position (Down a) where+ distance (Down p1) (Down p2) = distance p2 p1+ move distance (Down p) = Down (move (negate distance) p)+ offset wholeInput (Down p) = Factorial.length wholeInput - offset wholeInput p -- | Construct a 'Position' given the offset from the beginning of the full input. fromStart :: Int -> Int fromStart = id -- | Construct a 'Position' given the length remaining from the position to the end of the input.-fromEnd :: Int -> Dual Int-fromEnd = Dual+fromEnd :: Int -> Down Int+fromEnd = Down -- | Given the parser input, a 'Position' within it, and desired number of context lines, returns a description of -- the offset position in English.