-- 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.1 -- | 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_avRs where ropeContent = (highlightedRope . go_avRu) where go_avRu _f_avRv (HighlightedRope __ropeHighlights_avRw __ropeContent'_avRx) = ((\ __ropeContent_avRy -> HighlightedRope __ropeHighlights_avRw __ropeContent_avRy) <$> (_f_avRv __ropeContent'_avRx)) ropeHighlights = (highlightedRope . go_avRz) where go_avRz _f_avRA (HighlightedRope __ropeHighlights'_avRB __ropeContent_avRD) = ((\ __ropeHighlights_avRC -> HighlightedRope __ropeHighlights_avRC __ropeContent_avRD) <$> (_f_avRA __ropeHighlights'_avRB)) highlightedRope :: HasHighlightedRope t_avRs => Lens' t_avRs HighlightedRope ropeContent :: HasHighlightedRope t_avRs => Lens' t_avRs Rope ropeHighlights :: HasHighlightedRope t_avRs => Lens' t_avRs (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_awhZ where docContent = (highlightDoc . go_awi1) where go_awi1 _f_awi2 (HighlightDoc __docTitle_awi3 __docCss_awi4 __docContent'_awi5) = ((\ __docContent_awi6 -> HighlightDoc __docTitle_awi3 __docCss_awi4 __docContent_awi6) <$> (_f_awi2 __docContent'_awi5)) docCss = (highlightDoc . go_awi7) where go_awi7 _f_awi8 (HighlightDoc __docTitle_awi9 __docCss'_awia __docContent_awic) = ((\ __docCss_awib -> HighlightDoc __docTitle_awi9 __docCss_awib __docContent_awic) <$> (_f_awi8 __docCss'_awia)) docTitle = (highlightDoc . go_awid) where go_awid _f_awie (HighlightDoc __docTitle'_awif __docCss_awih __docContent_awii) = ((\ __docTitle_awig -> HighlightDoc __docTitle_awig __docCss_awih __docContent_awii) <$> (_f_awie __docTitle'_awif)) highlightDoc :: HasHighlightDoc t_awhZ => Lens' t_awhZ HighlightDoc docContent :: HasHighlightDoc t_awhZ => Lens' t_awhZ HighlightedRope docCss :: HasHighlightDoc t_awhZ => Lens' t_awhZ String docTitle :: HasHighlightDoc t_awhZ => Lens' t_awhZ 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_aBgU where renderingDelta = (rendering . go_aBgW) where go_aBgW _f_aBgX (Rendering __renderingDelta'_aBgY __renderingLineLen_aBh0 __renderingLineBytes_aBh1 __renderingLine_aBh2 __renderingOverlays_aBh3) = ((\ __renderingDelta_aBgZ -> Rendering __renderingDelta_aBgZ __renderingLineLen_aBh0 __renderingLineBytes_aBh1 __renderingLine_aBh2 __renderingOverlays_aBh3) <$> (_f_aBgX __renderingDelta'_aBgY)) renderingLine = (rendering . go_aBh4) where go_aBh4 _f_aBh5 (Rendering __renderingDelta_aBh6 __renderingLineLen_aBh7 __renderingLineBytes_aBh8 __renderingLine'_aBh9 __renderingOverlays_aBhb) = ((\ __renderingLine_aBha -> Rendering __renderingDelta_aBh6 __renderingLineLen_aBh7 __renderingLineBytes_aBh8 __renderingLine_aBha __renderingOverlays_aBhb) <$> (_f_aBh5 __renderingLine'_aBh9)) renderingLineBytes = (rendering . go_aBhc) where go_aBhc _f_aBhd (Rendering __renderingDelta_aBhe __renderingLineLen_aBhf __renderingLineBytes'_aBhg __renderingLine_aBhi __renderingOverlays_aBhj) = ((\ __renderingLineBytes_aBhh -> Rendering __renderingDelta_aBhe __renderingLineLen_aBhf __renderingLineBytes_aBhh __renderingLine_aBhi __renderingOverlays_aBhj) <$> (_f_aBhd __renderingLineBytes'_aBhg)) renderingLineLen = (rendering . go_aBhk) where go_aBhk _f_aBhl (Rendering __renderingDelta_aBhm __renderingLineLen'_aBhn __renderingLineBytes_aBhp __renderingLine_aBhq __renderingOverlays_aBhr) = ((\ __renderingLineLen_aBho -> Rendering __renderingDelta_aBhm __renderingLineLen_aBho __renderingLineBytes_aBhp __renderingLine_aBhq __renderingOverlays_aBhr) <$> (_f_aBhl __renderingLineLen'_aBhn)) renderingOverlays = (rendering . go_aBhs) where go_aBhs _f_aBht (Rendering __renderingDelta_aBhu __renderingLineLen_aBhv __renderingLineBytes_aBhw __renderingLine_aBhx __renderingOverlays'_aBhy) = ((\ __renderingOverlays_aBhz -> Rendering __renderingDelta_aBhu __renderingLineLen_aBhv __renderingLineBytes_aBhw __renderingLine_aBhx __renderingOverlays_aBhz) <$> (_f_aBht __renderingOverlays'_aBhy)) rendering :: HasRendering t_aBgU => Lens' t_aBgU Rendering renderingDelta :: HasRendering t_aBgU => Lens' t_aBgU Delta renderingLine :: HasRendering t_aBgU => Lens' t_aBgU (Lines -> Lines) renderingLineBytes :: HasRendering t_aBgU => Lens' t_aBgU Int64 renderingLineLen :: HasRendering t_aBgU => Lens' t_aBgU Int64 renderingOverlays :: HasRendering t_aBgU => Lens' t_aBgU (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_aC0v where fixitReplacement = (fixit . go_aC0x) where go_aC0x _f_aC0y (Fixit __fixitSpan_aC0z __fixitReplacement'_aC0A) = ((\ __fixitReplacement_aC0B -> Fixit __fixitSpan_aC0z __fixitReplacement_aC0B) <$> (_f_aC0y __fixitReplacement'_aC0A)) fixitSpan = (fixit . go_aC0C) where go_aC0C _f_aC0D (Fixit __fixitSpan'_aC0E __fixitReplacement_aC0G) = ((\ __fixitSpan_aC0F -> Fixit __fixitSpan_aC0F __fixitReplacement_aC0G) <$> (_f_aC0D __fixitSpan'_aC0E)) fixit :: HasFixit t_aC0v => Lens' t_aC0v Fixit fixitReplacement :: HasFixit t_aC0v => Lens' t_aC0v ByteString fixitSpan :: HasFixit t_aC0v => Lens' t_aC0v 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 -- | 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 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) -- | The Prism for the Success constructor of Result _Success :: (AsResult p f s t a b, Choice p, Applicative f) => Overloaded p f s t a b -- | The Prism for the Failure constructor of Result _Failure :: (AsResult p f s s a a, Choice p, Applicative f) => Overloaded' p f 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_a19im where expected = (err . go_a19io) where go_a19io _f_a19ip (Err __reason_a19iq __footnotes_a19ir __expected'_a19is) = ((\ __expected_a19it -> Err __reason_a19iq __footnotes_a19ir __expected_a19it) <$> (_f_a19ip __expected'_a19is)) footnotes = (err . go_a19iu) where go_a19iu _f_a19iv (Err __reason_a19iw __footnotes'_a19ix __expected_a19iz) = ((\ __footnotes_a19iy -> Err __reason_a19iw __footnotes_a19iy __expected_a19iz) <$> (_f_a19iv __footnotes'_a19ix)) reason = (err . go_a19iA) where go_a19iA _f_a19iB (Err __reason'_a19iC __footnotes_a19iE __expected_a19iF) = ((\ __reason_a19iD -> Err __reason_a19iD __footnotes_a19iE __expected_a19iF) <$> (_f_a19iB __reason'_a19iC)) err :: HasErr t_a19im => Lens' t_a19im Err expected :: HasErr t_a19im => Lens' t_a19im (Set String) footnotes :: HasErr t_a19im => Lens' t_a19im [Doc] reason :: HasErr t_a19im => Lens' t_a19im (Maybe Doc) -- | 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 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