-- 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.0 -- | 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 nextTab :: Int64 -> Int64 rewind :: Delta -> Delta near :: (HasDelta s, HasDelta t) => s -> t -> Bool column :: HasDelta t => t -> Int64 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 LineDirective :: {-# UNPACK #-} !ByteString -> {-# UNPACK #-} !Int64 -> 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 :: * data HighlightedRope HighlightedRope :: !(IntervalMap Delta Highlight) -> {-# UNPACK #-} !Rope -> HighlightedRope class HasHighlightedRope t_avG4 where ropeContent = (highlightedRope . go_avG6) where go_avG6 _f_avG7 (HighlightedRope __ropeHighlights_avG8 __ropeContent'_avG9) = ((\ __ropeContent_avGa -> HighlightedRope __ropeHighlights_avG8 __ropeContent_avGa) <$> (_f_avG7 __ropeContent'_avG9)) ropeHighlights = (highlightedRope . go_avGb) where go_avGb _f_avGc (HighlightedRope __ropeHighlights'_avGd __ropeContent_avGf) = ((\ __ropeHighlights_avGe -> HighlightedRope __ropeHighlights_avGe __ropeContent_avGf) <$> (_f_avGc __ropeHighlights'_avGd)) highlightedRope :: HasHighlightedRope t_avG4 => Lens' t_avG4 HighlightedRope ropeContent :: HasHighlightedRope t_avG4 => Lens' t_avG4 Rope ropeHighlights :: HasHighlightedRope t_avG4 => Lens' t_avG4 (IntervalMap Delta Highlight) withHighlight :: Highlight -> Doc -> Doc -- | Represents a source file like an HsColour rendered document data HighlightDoc HighlightDoc :: String -> String -> HighlightedRope -> HighlightDoc class HasHighlightDoc t_aw6w where docContent = (highlightDoc . go_aw6y) where go_aw6y _f_aw6z (HighlightDoc __docTitle_aw6A __docCss_aw6B __docContent'_aw6C) = ((\ __docContent_aw6D -> HighlightDoc __docTitle_aw6A __docCss_aw6B __docContent_aw6D) <$> (_f_aw6z __docContent'_aw6C)) docCss = (highlightDoc . go_aw6E) where go_aw6E _f_aw6F (HighlightDoc __docTitle_aw6G __docCss'_aw6H __docContent_aw6J) = ((\ __docCss_aw6I -> HighlightDoc __docTitle_aw6G __docCss_aw6I __docContent_aw6J) <$> (_f_aw6F __docCss'_aw6H)) docTitle = (highlightDoc . go_aw6K) where go_aw6K _f_aw6L (HighlightDoc __docTitle'_aw6M __docCss_aw6O __docContent_aw6P) = ((\ __docTitle_aw6N -> HighlightDoc __docTitle_aw6N __docCss_aw6O __docContent_aw6P) <$> (_f_aw6L __docTitle'_aw6M)) highlightDoc :: HasHighlightDoc t_aw6w => Lens' t_aw6w HighlightDoc docContent :: HasHighlightDoc t_aw6w => Lens' t_aw6w HighlightedRope docCss :: HasHighlightDoc t_aw6w => Lens' t_aw6w String docTitle :: HasHighlightDoc t_aw6w => Lens' t_aw6w String 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_aB63 where renderingDelta = (rendering . go_aB65) where go_aB65 _f_aB66 (Rendering __renderingDelta'_aB67 __renderingLineLen_aB69 __renderingLineBytes_aB6a __renderingLine_aB6b __renderingOverlays_aB6c) = ((\ __renderingDelta_aB68 -> Rendering __renderingDelta_aB68 __renderingLineLen_aB69 __renderingLineBytes_aB6a __renderingLine_aB6b __renderingOverlays_aB6c) <$> (_f_aB66 __renderingDelta'_aB67)) renderingLine = (rendering . go_aB6d) where go_aB6d _f_aB6e (Rendering __renderingDelta_aB6f __renderingLineLen_aB6g __renderingLineBytes_aB6h __renderingLine'_aB6i __renderingOverlays_aB6k) = ((\ __renderingLine_aB6j -> Rendering __renderingDelta_aB6f __renderingLineLen_aB6g __renderingLineBytes_aB6h __renderingLine_aB6j __renderingOverlays_aB6k) <$> (_f_aB6e __renderingLine'_aB6i)) renderingLineBytes = (rendering . go_aB6l) where go_aB6l _f_aB6m (Rendering __renderingDelta_aB6n __renderingLineLen_aB6o __renderingLineBytes'_aB6p __renderingLine_aB6r __renderingOverlays_aB6s) = ((\ __renderingLineBytes_aB6q -> Rendering __renderingDelta_aB6n __renderingLineLen_aB6o __renderingLineBytes_aB6q __renderingLine_aB6r __renderingOverlays_aB6s) <$> (_f_aB6m __renderingLineBytes'_aB6p)) renderingLineLen = (rendering . go_aB6t) where go_aB6t _f_aB6u (Rendering __renderingDelta_aB6v __renderingLineLen'_aB6w __renderingLineBytes_aB6y __renderingLine_aB6z __renderingOverlays_aB6A) = ((\ __renderingLineLen_aB6x -> Rendering __renderingDelta_aB6v __renderingLineLen_aB6x __renderingLineBytes_aB6y __renderingLine_aB6z __renderingOverlays_aB6A) <$> (_f_aB6u __renderingLineLen'_aB6w)) renderingOverlays = (rendering . go_aB6B) where go_aB6B _f_aB6C (Rendering __renderingDelta_aB6D __renderingLineLen_aB6E __renderingLineBytes_aB6F __renderingLine_aB6G __renderingOverlays'_aB6H) = ((\ __renderingOverlays_aB6I -> Rendering __renderingDelta_aB6D __renderingLineLen_aB6E __renderingLineBytes_aB6F __renderingLine_aB6G __renderingOverlays_aB6I) <$> (_f_aB6C __renderingOverlays'_aB6H)) rendering :: HasRendering t_aB63 => Lens' t_aB63 Rendering renderingDelta :: HasRendering t_aB63 => Lens' t_aB63 Delta renderingLine :: HasRendering t_aB63 => Lens' t_aB63 (Lines -> Lines) renderingLineBytes :: HasRendering t_aB63 => Lens' t_aB63 Int64 renderingLineLen :: HasRendering t_aB63 => Lens' t_aB63 Int64 renderingOverlays :: HasRendering t_aB63 => Lens' t_aB63 (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_aBPI where fixitReplacement = (fixit . go_aBPK) where go_aBPK _f_aBPL (Fixit __fixitSpan_aBPM __fixitReplacement'_aBPN) = ((\ __fixitReplacement_aBPO -> Fixit __fixitSpan_aBPM __fixitReplacement_aBPO) <$> (_f_aBPL __fixitReplacement'_aBPN)) fixitSpan = (fixit . go_aBPP) where go_aBPP _f_aBPQ (Fixit __fixitSpan'_aBPR __fixitReplacement_aBPT) = ((\ __fixitSpan_aBPS -> Fixit __fixitSpan_aBPS __fixitReplacement_aBPT) <$> (_f_aBPQ __fixitSpan'_aBPR)) fixit :: HasFixit t_aBPI => Lens' t_aBPI Fixit fixitReplacement :: HasFixit t_aBPI => Lens' t_aBPI ByteString fixitSpan :: HasFixit t_aBPI => Lens' t_aBPI 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) => MarkParsing d (RWST r w s m) instance (MonadPlus m, MarkParsing d m, Monoid w) => MarkParsing d (RWST r w s m) instance (MonadPlus m, MarkParsing d m, Monoid w) => MarkParsing d (WriterT w m) instance (MonadPlus m, MarkParsing d m, Monoid w) => MarkParsing d (WriterT w m) instance (MonadPlus m, MarkParsing d m) => MarkParsing d (ReaderT e m) instance (MonadPlus m, MarkParsing d m) => MarkParsing d (StateT s m) instance (MonadPlus m, MarkParsing d m) => MarkParsing d (StateT s m) instance (MonadPlus m, DeltaParsing m) => DeltaParsing (IdentityT m) instance (MonadPlus m, DeltaParsing m, Monoid w) => DeltaParsing (RWST r w s m) instance (MonadPlus m, DeltaParsing m, Monoid w) => DeltaParsing (RWST r w s m) instance (MonadPlus m, DeltaParsing m, Monoid w) => DeltaParsing (WriterT w m) instance (MonadPlus m, DeltaParsing m, Monoid w) => DeltaParsing (WriterT w m) instance (MonadPlus m, DeltaParsing m) => DeltaParsing (ReaderT e m) instance (MonadPlus m, DeltaParsing m) => DeltaParsing (StateT s m) instance (MonadPlus m, DeltaParsing m) => DeltaParsing (StateT s m) -- | Results and Parse Errors module Text.Trifecta.Result data Result a Success :: a -> Result a Failure :: Doc -> Result a class AsResult p f s t a b | s -> a, t -> b, s b -> t, t a -> s _Result :: AsResult p f s t a b => Overloaded p f s t (Result a) (Result b) _Success :: (AsResult p f s t a b, Choice p, Applicative f) => Overloaded p f s t a b _Failure :: (AsResult p f s s a a, Choice p, Applicative f) => Overloaded' p f s Doc data Err Err :: Maybe Doc -> [Doc] -> Set String -> Err _reason :: Err -> Maybe Doc _footnotes :: Err -> [Doc] _expected :: Err -> Set String class HasErr t_a18Ez where expected = (err . go_a18EB) where go_a18EB _f_a18EC (Err __reason_a18ED __footnotes_a18EE __expected'_a18EF) = ((\ __expected_a18EG -> Err __reason_a18ED __footnotes_a18EE __expected_a18EG) <$> (_f_a18EC __expected'_a18EF)) footnotes = (err . go_a18EH) where go_a18EH _f_a18EI (Err __reason_a18EJ __footnotes'_a18EK __expected_a18EM) = ((\ __footnotes_a18EL -> Err __reason_a18EJ __footnotes_a18EL __expected_a18EM) <$> (_f_a18EI __footnotes'_a18EK)) reason = (err . go_a18EN) where go_a18EN _f_a18EO (Err __reason'_a18EP __footnotes_a18ER __expected_a18ES) = ((\ __reason_a18EQ -> Err __reason_a18EQ __footnotes_a18ER __expected_a18ES) <$> (_f_a18EO __reason'_a18EP)) err :: HasErr t_a18Ez => Lens' t_a18Ez Err expected :: HasErr t_a18Ez => Lens' t_a18Ez (Set String) footnotes :: HasErr t_a18Ez => Lens' t_a18Ez [Doc] reason :: HasErr t_a18Ez => Lens' t_a18Ez (Maybe Doc) explain :: Rendering -> Err -> Doc failing :: 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 p f (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 Parsing Parser instance MonadPlus Parser instance Monad Parser instance Monoid (Parser a) instance Semigroup (Parser a) instance Alternative Parser instance Applicative Parser instance Functor Parser module Text.Trifecta