-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A modern parser combinator library with convenient diagnostics -- -- A modern parser combinator library with slicing and Clang-style -- colored diagnostics @package trifecta @version 1.5 -- | Fast zero based arrays, based on the implementation in the HAMT-branch -- of unordered-containers module Text.Trifecta.Util.Array data Array a data MArray s a -- | Create a new mutable array of specified size, in the specified state -- thread, with each element containing the specified initial value. new :: Int -> a -> ST s (MArray s a) new_ :: Int -> ST s (MArray s a) empty :: Array a singleton :: a -> Array a length :: Array a -> Int lengthM :: MArray s a -> Int read :: MArray s a -> Int -> ST s a write :: MArray s a -> Int -> a -> ST s () index :: Array a -> Int -> a index_ :: Array a -> Int -> ST s a indexM_ :: MArray s a -> Int -> ST s a -- | O(n) Update the element at the given position in this array. update :: Array e -> Int -> e -> Array e -- | O(n) Insert an element at the given position in this array, -- increasing its size by one. insert :: Array e -> Int -> e -> Array e -- | O(n) Delete an element at the given position in this array, -- decreasing its size by one. delete :: Array e -> Int -> Array e unsafeFreeze :: MArray s a -> ST s (Array a) run :: (forall s. ST s (MArray s e)) -> Array e run2 :: (forall s. ST s (MArray s e, a)) -> (Array e, a) -- | Unsafely copy the elements of an array. Array bounds are not checked. copy :: Array e -> Int -> MArray s e -> Int -> Int -> ST s () -- | Unsafely copy the elements of an array. Array bounds are not checked. copyM :: MArray s e -> Int -> MArray s e -> Int -> Int -> ST s () foldl' :: (b -> a -> b) -> b -> Array a -> b foldr :: (a -> b -> b) -> b -> Array a -> b thaw :: Array e -> Int -> Int -> ST s (MArray s e) map :: (a -> b) -> Array a -> Array b -- | Strict version of map. map' :: (a -> b) -> Array a -> Array b traverse :: Applicative f => (a -> f b) -> Array a -> f (Array b) filter :: (a -> Bool) -> Array a -> Array a instance NFData a => NFData (Array a) -- | Interval maps implemented using the FingerTree type, following -- section 4.8 of -- -- -- -- An amortized running time is given for each operation, with n -- referring to the size of the priority queue. These bounds hold even in -- a persistent (shared) setting. -- -- Note: Many of these operations have the same names as similar -- operations on lists in the Prelude. The ambiguity may be -- resolved using either qualification or the hiding clause. -- -- Unlike Data.IntervalMap.FingerTree, this version sorts things -- so that the largest interval from a given point comes first. This way -- if you have nested intervals, you get the outermost interval before -- the contained intervals. module Text.Trifecta.Util.IntervalMap -- | A closed interval. The lower bound should be less than or equal to the -- higher bound. data Interval v Interval :: v -> v -> Interval v low :: Interval v -> v high :: Interval v -> v -- | Map of closed intervals, possibly with duplicates. The Foldable -- and Traversable instances process the intervals in -- lexicographical order. newtype IntervalMap v a IntervalMap :: FingerTree (IntInterval v) (Node v a) -> IntervalMap v a runIntervalMap :: IntervalMap v a -> FingerTree (IntInterval v) (Node v a) -- | O(1). Interval map with a single entry. singleton :: Ord v => Interval v -> a -> IntervalMap v a -- | O(log n). Insert an interval into a map. The map may contain -- duplicate intervals; the new entry will be inserted before any -- existing entries for the same interval. insert :: Ord v => v -> v -> a -> IntervalMap v a -> IntervalMap v a -- | O(k log (n/k)). All intervals that contain the given -- point, in lexicographical order. search :: Ord v => v -> IntervalMap v a -> [(Interval v, a)] -- | O(k log (n/k)). All intervals that intersect with the -- given interval, in lexicographical order. intersections :: Ord v => v -> v -> IntervalMap v a -> [(Interval v, a)] -- | O(k log (n/k)). All intervals that contain the given -- interval, in lexicographical order. dominators :: Ord v => v -> v -> IntervalMap v a -> [(Interval v, a)] -- | O(n). Add a delta to each interval in the map offset :: (Ord v, Monoid v) => v -> IntervalMap v a -> IntervalMap v a data IntInterval v NoInterval :: IntInterval v IntInterval :: (Interval v) -> v -> IntInterval v fromList :: Ord v => [(v, v, a)] -> IntervalMap v a instance Show v => Show (Interval v) instance Ord v => Monoid (IntervalMap v a) instance Ord v => HasUnion0 (IntervalMap v a) instance Ord v => HasUnion (IntervalMap v a) instance Ord v => Measured (IntInterval v) (IntervalMap v a) instance TraversableWithIndex (Interval v) (IntervalMap v) instance Traversable (IntervalMap v) instance FoldableWithIndex (Interval v) (IntervalMap v) instance Foldable (IntervalMap v) instance FunctorWithIndex (Interval v) (IntervalMap v) instance Functor (IntervalMap v) instance Ord v => Measured (IntInterval v) (Node v a) instance Ord v => Monoid (IntInterval v) instance TraversableWithIndex (Interval v) (Node v) instance Traversable (Node v) instance FoldableWithIndex (Interval v) (Node v) instance Foldable (Node v) instance FunctorWithIndex (Interval v) (Node v) instance Functor (Node v) instance Traversable Interval instance Foldable Interval instance Functor Interval instance Ord v => Ord (Interval v) instance Eq v => Eq (Interval v) instance (Ord v, Monoid v) => Reducer v (Interval v) instance Ord v => Semigroup (Interval v) module Text.Trifecta.Delta data Delta Columns :: {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> Delta Tab :: {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> Delta Lines :: {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> Delta Directed :: !ByteString -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> Delta class HasDelta t delta :: HasDelta t => t -> Delta class HasBytes t bytes :: HasBytes t => t -> Int64 -- | Increment a column number to the next tabstop. nextTab :: Int64 -> Int64 -- | Rewind a Delta to the beginning of the line. rewind :: Delta -> Delta -- | Should we show two things with a Delta on the same line? near :: (HasDelta s, HasDelta t) => s -> t -> Bool -- | Retrieve the character offset within the current line from this -- Delta. column :: HasDelta t => t -> Int64 -- | Retrieve the byte offset within the current line from this -- Delta. columnByte :: Delta -> Int64 instance Typeable Delta instance Show Delta instance Data Delta instance Generic Delta instance Datatype D1Delta instance Constructor C1_0Delta instance Constructor C1_1Delta instance Constructor C1_2Delta instance Constructor C1_3Delta instance (Measured v a, HasDelta v) => HasDelta (FingerTree v a) instance HasDelta ByteString instance HasDelta Word8 instance HasDelta Char instance HasDelta Delta instance Semigroup Delta instance Monoid Delta instance Hashable Delta instance HasBytes Delta instance Pretty Delta instance (HasDelta l, HasDelta r) => HasDelta (Either l r) instance Ord Delta instance Eq Delta instance (Measured v a, HasBytes v) => HasBytes (FingerTree v a) instance HasBytes ByteString module Text.Trifecta.Rope data Rope Rope :: !Delta -> !(FingerTree Delta Strand) -> Rope rope :: FingerTree Delta Strand -> Rope data Strand Strand :: {-# UNPACK #-} !ByteString -> !Delta -> Strand Skipping :: !Delta -> Strand strand :: ByteString -> Strand strands :: Rope -> FingerTree Delta Strand -- | grab a the contents of a rope from a given location up to a newline grabRest :: Delta -> Rope -> r -> (Delta -> ByteString -> r) -> r -- | grab a the contents of a rope from a given location up to a newline grabLine :: Delta -> Rope -> r -> (Delta -> ByteString -> r) -> r instance Typeable Strand instance Show Strand instance Data Strand instance Generic Strand instance Show Rope instance Datatype D1Strand instance Constructor C1_0Strand instance Constructor C1_1Strand instance Reducer [Char] Rope instance Reducer ByteString Rope instance Reducer Strand Rope instance Reducer Rope Rope instance Semigroup Rope instance Monoid Rope instance Measured Delta Rope instance HasDelta Rope instance HasBytes Rope instance HasBytes Strand instance HasDelta Strand instance Hashable Strand instance Measured Delta Strand -- | harder, better, faster, stronger... module Text.Trifecta.Util.It data It r a Pure :: a -> It r a It :: a -> (r -> It r a) -> It r a needIt :: a -> (r -> Maybe a) -> It r a wantIt :: a -> (r -> (# Bool, a #)) -> It r a simplifyIt :: It r a -> r -> It r a runIt :: (a -> o) -> (a -> (r -> It r a) -> o) -> It r a -> o -- | Given a position, go there, and grab the text forward from that point fillIt :: r -> (Delta -> ByteString -> r) -> Delta -> It Rope r -- | Return the text of the line that contains a given position rewindIt :: Delta -> It Rope (Maybe ByteString) sliceIt :: Delta -> Delta -> It Rope ByteString instance Comonad (It r) instance ComonadApply (It r) instance Monad (It r) instance Applicative (It r) instance Functor (It r) instance Show a => Show (It r a) module Text.Trifecta.Highlight -- | Tags used by the TokenParsing highlight combinator. data Highlight :: * -- | A HighlightedRope is a Rope with an associated -- IntervalMap full of highlighted regions. data HighlightedRope HighlightedRope :: !(IntervalMap Delta Highlight) -> {-# UNPACK #-} !Rope -> HighlightedRope class HasHighlightedRope t_ar4O where ropeContent = (highlightedRope . go_ar4Q) where go_ar4Q _f_ar4R (HighlightedRope __ropeHighlights_ar4S __ropeContent'_ar4T) = ((\ __ropeContent_ar4U -> HighlightedRope __ropeHighlights_ar4S __ropeContent_ar4U) <$> (_f_ar4R __ropeContent'_ar4T)) ropeHighlights = (highlightedRope . go_ar4V) where go_ar4V _f_ar4W (HighlightedRope __ropeHighlights'_ar4X __ropeContent_ar4Z) = ((\ __ropeHighlights_ar4Y -> HighlightedRope __ropeHighlights_ar4Y __ropeContent_ar4Z) <$> (_f_ar4W __ropeHighlights'_ar4X)) highlightedRope :: HasHighlightedRope t_ar4O => Lens' t_ar4O HighlightedRope ropeContent :: HasHighlightedRope t_ar4O => Lens' t_ar4O Rope ropeHighlights :: HasHighlightedRope t_ar4O => Lens' t_ar4O (IntervalMap Delta Highlight) -- | Convert a Highlight into a coloration on a Doc. withHighlight :: Highlight -> Doc -> Doc -- | Represents a source file like an HsColour rendered document data HighlightDoc HighlightDoc :: String -> String -> HighlightedRope -> HighlightDoc class HasHighlightDoc t_aruF where docContent = (highlightDoc . go_aruH) where go_aruH _f_aruI (HighlightDoc __docTitle_aruJ __docCss_aruK __docContent'_aruL) = ((\ __docContent_aruM -> HighlightDoc __docTitle_aruJ __docCss_aruK __docContent_aruM) <$> (_f_aruI __docContent'_aruL)) docCss = (highlightDoc . go_aruN) where go_aruN _f_aruO (HighlightDoc __docTitle_aruP __docCss'_aruQ __docContent_aruS) = ((\ __docCss_aruR -> HighlightDoc __docTitle_aruP __docCss_aruR __docContent_aruS) <$> (_f_aruO __docCss'_aruQ)) docTitle = (highlightDoc . go_aruT) where go_aruT _f_aruU (HighlightDoc __docTitle'_aruV __docCss_aruX __docContent_aruY) = ((\ __docTitle_aruW -> HighlightDoc __docTitle_aruW __docCss_aruX __docContent_aruY) <$> (_f_aruU __docTitle'_aruV)) highlightDoc :: HasHighlightDoc t_aruF => Lens' t_aruF HighlightDoc docContent :: HasHighlightDoc t_aruF => Lens' t_aruF HighlightedRope docCss :: HasHighlightDoc t_aruF => Lens' t_aruF String docTitle :: HasHighlightDoc t_aruF => Lens' t_aruF String -- | Generate an HTML document from a title and a HighlightedRope. doc :: String -> HighlightedRope -> HighlightDoc instance ToMarkup HighlightDoc instance HasHighlightDoc HighlightDoc instance Pretty HighlightedRope instance ToMarkup HighlightedRope instance Ord (Located a) instance Eq (Located a) instance Monoid HighlightedRope instance Semigroup HighlightedRope instance HasBytes HighlightedRope instance HasDelta HighlightedRope instance HasHighlightedRope HighlightedRope -- | The type for Lines will very likely change over time, to enable -- drawing lit up multi-character versions of control characters for -- ^Z, ^[, 0xff, etc. This will make -- for much nicer diagnostics when working with protocols. module Text.Trifecta.Rendering data Rendering Rendering :: !Delta -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> (Lines -> Lines) -> (Delta -> Lines -> Lines) -> Rendering class HasRendering t_avzB where renderingDelta = (rendering . go_avzD) where go_avzD _f_avzE (Rendering __renderingDelta'_avzF __renderingLineLen_avzH __renderingLineBytes_avzI __renderingLine_avzJ __renderingOverlays_avzK) = ((\ __renderingDelta_avzG -> Rendering __renderingDelta_avzG __renderingLineLen_avzH __renderingLineBytes_avzI __renderingLine_avzJ __renderingOverlays_avzK) <$> (_f_avzE __renderingDelta'_avzF)) renderingLine = (rendering . go_avzL) where go_avzL _f_avzM (Rendering __renderingDelta_avzN __renderingLineLen_avzO __renderingLineBytes_avzP __renderingLine'_avzQ __renderingOverlays_avzS) = ((\ __renderingLine_avzR -> Rendering __renderingDelta_avzN __renderingLineLen_avzO __renderingLineBytes_avzP __renderingLine_avzR __renderingOverlays_avzS) <$> (_f_avzM __renderingLine'_avzQ)) renderingLineBytes = (rendering . go_avzT) where go_avzT _f_avzU (Rendering __renderingDelta_avzV __renderingLineLen_avzW __renderingLineBytes'_avzX __renderingLine_avzZ __renderingOverlays_avA0) = ((\ __renderingLineBytes_avzY -> Rendering __renderingDelta_avzV __renderingLineLen_avzW __renderingLineBytes_avzY __renderingLine_avzZ __renderingOverlays_avA0) <$> (_f_avzU __renderingLineBytes'_avzX)) renderingLineLen = (rendering . go_avA1) where go_avA1 _f_avA2 (Rendering __renderingDelta_avA3 __renderingLineLen'_avA4 __renderingLineBytes_avA6 __renderingLine_avA7 __renderingOverlays_avA8) = ((\ __renderingLineLen_avA5 -> Rendering __renderingDelta_avA3 __renderingLineLen_avA5 __renderingLineBytes_avA6 __renderingLine_avA7 __renderingOverlays_avA8) <$> (_f_avA2 __renderingLineLen'_avA4)) renderingOverlays = (rendering . go_avA9) where go_avA9 _f_avAa (Rendering __renderingDelta_avAb __renderingLineLen_avAc __renderingLineBytes_avAd __renderingLine_avAe __renderingOverlays'_avAf) = ((\ __renderingOverlays_avAg -> Rendering __renderingDelta_avAb __renderingLineLen_avAc __renderingLineBytes_avAd __renderingLine_avAe __renderingOverlays_avAg) <$> (_f_avAa __renderingOverlays'_avAf)) rendering :: HasRendering t_avzB => Lens' t_avzB Rendering renderingDelta :: HasRendering t_avzB => Lens' t_avzB Delta renderingLine :: HasRendering t_avzB => Lens' t_avzB (Lines -> Lines) renderingLineBytes :: HasRendering t_avzB => Lens' t_avzB Int64 renderingLineLen :: HasRendering t_avzB => Lens' t_avzB Int64 renderingOverlays :: HasRendering t_avzB => Lens' t_avzB (Delta -> Lines -> Lines) nullRendering :: Rendering -> Bool emptyRendering :: Rendering class Source t source :: Source t => t -> (Int64, Int64, Lines -> Lines) -- | create a drawing surface rendered :: Source s => Delta -> s -> Rendering class Renderable t render :: Renderable t => t -> Rendering data Rendered a (:@) :: a -> Rendering -> Rendered a -- |
--   In file included from baz.c:9
--   In file included from bar.c:4
--   foo.c:8:36: note
--   int main(int argc, char ** argv) { int; }
--                                      ^
--   
data Caret Caret :: !Delta -> {-# UNPACK #-} !ByteString -> Caret class HasCaret t caret :: HasCaret t => Lens' t Caret data Careted a (:^) :: a -> Caret -> Careted a drawCaret :: Delta -> Delta -> Lines -> Lines addCaret :: Delta -> Rendering -> Rendering caretEffects :: [SGR] renderingCaret :: Delta -> ByteString -> Rendering data Span Span :: !Delta -> !Delta -> {-# UNPACK #-} !ByteString -> Span class HasSpan t span :: HasSpan t => Lens' t Span data Spanned a (:~) :: a -> Span -> Spanned a spanEffects :: [SGR] drawSpan :: Delta -> Delta -> Delta -> Lines -> Lines -- |
--   int main(int argc, char ** argv) { int; }
--                                      ^~~
--   
addSpan :: Delta -> Delta -> Rendering -> Rendering data Fixit Fixit :: {-# UNPACK #-} !Span -> !ByteString -> Fixit _fixitSpan :: Fixit -> {-# UNPACK #-} !Span _fixitReplacement :: Fixit -> !ByteString class HasFixit t_awjB where fixitReplacement = (fixit . go_awjD) where go_awjD _f_awjE (Fixit __fixitSpan_awjF __fixitReplacement'_awjG) = ((\ __fixitReplacement_awjH -> Fixit __fixitSpan_awjF __fixitReplacement_awjH) <$> (_f_awjE __fixitReplacement'_awjG)) fixitSpan = (fixit . go_awjI) where go_awjI _f_awjJ (Fixit __fixitSpan'_awjK __fixitReplacement_awjM) = ((\ __fixitSpan_awjL -> Fixit __fixitSpan_awjL __fixitReplacement_awjM) <$> (_f_awjJ __fixitSpan'_awjK)) fixit :: HasFixit t_awjB => Lens' t_awjB Fixit fixitReplacement :: HasFixit t_awjB => Lens' t_awjB ByteString fixitSpan :: HasFixit t_awjB => Lens' t_awjB Span drawFixit :: Delta -> Delta -> String -> Delta -> Lines -> Lines addFixit :: Delta -> Delta -> String -> Rendering -> Rendering type Lines = Array (Int, Int64) ([SGR], Char) draw :: [SGR] -> Int -> Int64 -> String -> Lines -> Lines ifNear :: Delta -> (Lines -> Lines) -> Delta -> Lines -> Lines (.#) :: (Delta -> Lines -> Lines) -> Rendering -> Rendering instance Renderable Fixit instance Reducer Fixit Rendering instance Hashable Fixit instance HasSpan Fixit instance HasFixit Fixit instance Typeable Caret instance Typeable1 Careted instance Typeable Span instance Typeable1 Spanned instance Typeable Fixit instance Show a => Show (Rendered a) instance Eq Caret instance Ord Caret instance Show Caret instance Data Caret instance Generic Caret instance Eq a => Eq (Careted a) instance Ord a => Ord (Careted a) instance Show a => Show (Careted a) instance Data a => Data (Careted a) instance Generic (Careted a) instance Eq Span instance Ord Span instance Show Span instance Data Span instance Generic Span instance Eq a => Eq (Spanned a) instance Ord a => Ord (Spanned a) instance Show a => Show (Spanned a) instance Data a => Data (Spanned a) instance Generic (Spanned a) instance Eq Fixit instance Ord Fixit instance Show Fixit instance Data Fixit instance Generic Fixit instance Datatype D1Caret instance Constructor C1_0Caret instance Datatype D1Careted instance Constructor C1_0Careted instance Datatype D1Span instance Constructor C1_0Span instance Datatype D1Spanned instance Constructor C1_0Spanned instance Datatype D1Fixit instance Constructor C1_0Fixit instance Selector S1_0_0Fixit instance Selector S1_0_1Fixit instance Hashable a => Hashable (Spanned a) instance Renderable (Spanned a) instance Reducer (Spanned a) Rendering instance Traversable Spanned instance Foldable Spanned instance ComonadApply Spanned instance Comonad Spanned instance Functor Spanned instance HasSpan (Spanned a) instance Hashable Span instance Reducer Span Rendering instance Semigroup Span instance Renderable Span instance HasSpan Span instance Hashable a => Hashable (Careted a) instance Reducer (Careted a) Rendering instance Renderable (Careted a) instance Traversable Careted instance Foldable Careted instance ComonadApply Careted instance Comonad Careted instance HasBytes (Careted a) instance HasDelta (Careted a) instance Functor Careted instance HasCaret (Careted a) instance Semigroup Caret instance Reducer Caret Rendering instance Renderable Caret instance HasDelta Caret instance HasBytes Caret instance Hashable Caret instance HasCaret Caret instance Renderable (Rendered a) instance Traversable Rendered instance Foldable Rendered instance ComonadApply Rendered instance Comonad Rendered instance HasBytes (Rendered a) instance HasDelta (Rendered a) instance Functor Rendered instance Pretty Rendering instance Source ByteString instance Source String instance Renderable Rendering instance HasDelta Rendering instance Monoid Rendering instance Semigroup Rendering instance Show Rendering instance HasRendering Rendering module Text.Trifecta.Combinators -- | This class provides parsers with easy access to: -- -- 1) the current line contents. 2) the current position as a -- Delta. 3) the ability to use sliced on any parser. class (MonadPlus m, TokenParsing m) => DeltaParsing m where rend = rendered <$> position <*> line restOfLine = drop . fromIntegral . columnByte <$> position <*> line line :: DeltaParsing m => m ByteString position :: DeltaParsing m => m Delta slicedWith :: DeltaParsing m => (a -> ByteString -> r) -> m a -> m r rend :: (DeltaParsing m, DeltaParsing m) => m Rendering restOfLine :: (DeltaParsing m, DeltaParsing m) => m ByteString -- | Run a parser, grabbing all of the text between its start and end -- points and discarding the original result sliced :: DeltaParsing m => m a -> m ByteString -- | Grab a Caret pointing to the current location. careting :: DeltaParsing m => m Caret -- | Parse a Careted result. Pointing the Caret to where you -- start. careted :: DeltaParsing m => m a -> m (Careted a) -- | Discard the result of a parse, returning a Span from where we -- start to where it ended parsing. spanning :: DeltaParsing m => m a -> m Span -- | Parse a Spanned result. The Span starts here and runs to -- the last position parsed. spanned :: DeltaParsing m => m a -> m (Spanned a) -- | Grab a fixit. fixiting :: DeltaParsing m => m ByteString -> m Fixit -- | This class is a refinement of DeltaParsing that adds the -- ability to mark your position in the input and return there for -- further parsing later. class (DeltaParsing m, HasDelta d) => MarkParsing d m | m -> d mark :: MarkParsing d m => m d release :: MarkParsing d m => d -> m () instance (MonadPlus m, MarkParsing d m) => MarkParsing d (IdentityT m) instance (MonadPlus m, MarkParsing d m, Monoid w, Show s, Show w) => MarkParsing d (RWST r w s m) instance (MonadPlus m, MarkParsing d m, Monoid w, Show s, Show w) => MarkParsing d (RWST r w s m) instance (MonadPlus m, MarkParsing d m, Monoid w, Show w) => MarkParsing d (WriterT w m) instance (MonadPlus m, MarkParsing d m, Monoid w, Show w) => MarkParsing d (WriterT w m) instance (MonadPlus m, MarkParsing d m) => MarkParsing d (ReaderT e m) instance (MonadPlus m, MarkParsing d m, Show s) => MarkParsing d (StateT s m) instance (MonadPlus m, MarkParsing d m, Show s) => MarkParsing d (StateT s m) instance (MonadPlus m, DeltaParsing m) => DeltaParsing (IdentityT m) instance (MonadPlus m, DeltaParsing m, Monoid w, Show s, Show w) => DeltaParsing (RWST r w s m) instance (MonadPlus m, DeltaParsing m, Monoid w, Show s, Show w) => DeltaParsing (RWST r w s m) instance (MonadPlus m, DeltaParsing m, Monoid w, Show w) => DeltaParsing (WriterT w m) instance (MonadPlus m, DeltaParsing m, Monoid w, Show w) => DeltaParsing (WriterT w m) instance (MonadPlus m, DeltaParsing m) => DeltaParsing (ReaderT e m) instance (MonadPlus m, DeltaParsing m, Show s) => DeltaParsing (StateT s m) instance (MonadPlus m, DeltaParsing m, Show s) => DeltaParsing (StateT s m) -- | Results and Parse Errors module Text.Trifecta.Result -- | The result of parsing. Either we succeeded or something went wrong. data Result a Success :: a -> Result a Failure :: Doc -> Result a -- | A Prism that lets you embed or retrieve a Result in a -- potentially larger type. class AsResult s t a b | s -> a, t -> b, s b -> t, t a -> s _Result :: AsResult s t a b => Prism s t (Result a) (Result b) -- | The Prism for the Success constructor of Result _Success :: AsResult s t a b => Prism s t a b -- | The Prism for the Failure constructor of Result _Failure :: AsResult s s a a => Prism' s Doc -- | This is used to report an error. What went wrong, some supplemental -- docs and a set of things expected at the current location. This does -- not, however, include the actual location. data Err Err :: Maybe Doc -> [Doc] -> Set String -> Err _reason :: Err -> Maybe Doc _footnotes :: Err -> [Doc] _expected :: Err -> Set String class HasErr t_a14Rl where expected = (err . go_a14Rn) where go_a14Rn _f_a14Ro (Err __reason_a14Rp __footnotes_a14Rq __expected'_a14Rr) = ((\ __expected_a14Rs -> Err __reason_a14Rp __footnotes_a14Rq __expected_a14Rs) <$> (_f_a14Ro __expected'_a14Rr)) footnotes = (err . go_a14Rt) where go_a14Rt _f_a14Ru (Err __reason_a14Rv __footnotes'_a14Rw __expected_a14Ry) = ((\ __footnotes_a14Rx -> Err __reason_a14Rv __footnotes_a14Rx __expected_a14Ry) <$> (_f_a14Ru __footnotes'_a14Rw)) reason = (err . go_a14Rz) where go_a14Rz _f_a14RA (Err __reason'_a14RB __footnotes_a14RD __expected_a14RE) = ((\ __reason_a14RC -> Err __reason_a14RC __footnotes_a14RD __expected_a14RE) <$> (_f_a14RA __reason'_a14RB)) err :: HasErr t_a14Rl => Lens' t_a14Rl Err expected :: HasErr t_a14Rl => Lens' t_a14Rl (Set String) footnotes :: HasErr t_a14Rl => Lens' t_a14Rl [Doc] reason :: HasErr t_a14Rl => Lens' t_a14Rl (Maybe Doc) class Errable m raiseErr :: Errable m => Err -> m a -- | Convert a location and an Err into a Doc explain :: Rendering -> Err -> Doc -- | Generate a simple Err word-wrapping the supplied message. failed :: String -> Err instance Show a => Show (Result a) instance Functor Result instance Foldable Result instance Traversable Result instance Alternative Result instance Applicative Result instance Show a => Pretty (Result a) instance AsResult (Result a) (Result b) a b instance Monoid Err instance Semigroup Err instance HasErr Err module Text.Trifecta.Parser newtype Parser a Parser :: (forall r. (a -> Err -> It Rope r) -> (Err -> It Rope r) -> (a -> Set String -> Delta -> ByteString -> It Rope r) -> (Doc -> It Rope r) -> Delta -> ByteString -> It Rope r) -> Parser a unparser :: Parser a -> forall r. (a -> Err -> It Rope r) -> (Err -> It Rope r) -> (a -> Set String -> Delta -> ByteString -> It Rope r) -> (Doc -> It Rope r) -> Delta -> ByteString -> It Rope r manyAccum :: (a -> [a] -> [a]) -> Parser a -> Parser [a] data Step a StepDone :: !Rope -> a -> Step a StepFail :: !Rope -> Doc -> Step a StepCont :: !Rope -> (Result a) -> (Rope -> Step a) -> Step a feed :: Reducer t Rope => t -> Step r -> Step r starve :: Step a -> Result a stepParser :: Parser a -> Delta -> ByteString -> Step a stepResult :: Rope -> Result a -> Step a stepIt :: It Rope a -> Step a -- | parseFromFile p filePath runs a parser p on the -- input read from filePath using readFile. All -- diagnostic messages emitted over the course of the parse attempt are -- shown to the user on the console. -- --
--   main = do
--     result <- parseFromFile numbers "digits.txt"
--     case result of
--       Nothing -> return ()
--       Just a  -> print $ sum a
--   
parseFromFile :: MonadIO m => Parser a -> String -> m (Maybe a) -- | parseFromFileEx p filePath runs a parser p on the -- input read from filePath using readFile. Returns all -- diagnostic messages emitted over the course of the parse and the -- answer if the parse was successful. -- --
--   main = do
--     result <- parseFromFileEx (many number) "digits.txt"
--     case result of
--       Failure xs -> displayLn xs
--       Success a  -> print (sum a)
--   
parseFromFileEx :: MonadIO m => Parser a -> String -> m (Result a) parseString :: Parser a -> Delta -> String -> Result a -- | parseByteString p delta i runs a parser p on -- i. parseByteString :: Parser a -> Delta -> ByteString -> Result a parseTest :: (MonadIO m, Show a) => Parser a -> String -> m () instance Functor Step instance Show a => Show (Step a) instance MarkParsing Delta Parser instance DeltaParsing Parser instance TokenParsing Parser instance CharParsing Parser instance LookAheadParsing Parser instance Errable Parser instance Parsing Parser instance MonadPlus Parser instance Monad Parser instance Monoid a => Monoid (Parser a) instance Semigroup a => Semigroup (Parser a) instance Alternative Parser instance Applicative Parser instance Functor Parser module Text.Trifecta