{-# language BangPatterns #-}
{-# language CPP #-}
{-# language DeriveFoldable #-}
{-# language DeriveFunctor #-}
{-# language DeriveTraversable #-}
{-# language FlexibleContexts #-}
{-# language FlexibleInstances #-}
{-# language FunctionalDependencies #-}
{-# language MultiParamTypeClasses #-}
{-# language Rank2Types #-}
{-# language TemplateHaskell #-}
module Text.Trifecta.Parser
( Parser(..)
, manyAccum
, Step(..)
, feed
, starve
, stepParser
, stepResult
, stepIt
, runParser
, parseFromFile
, parseFromFileEx
, parseString
, parseByteString
, parseTest
) where
import Control.Applicative as Alternative
import Control.Monad (MonadPlus(..), ap, join)
import Control.Monad.IO.Class
import qualified Control.Monad.Fail as Fail
import Data.ByteString as Strict hiding (empty, snoc)
import Data.ByteString.UTF8 as UTF8
import Data.Maybe (fromMaybe, isJust)
#if !(MIN_VERSION_base(4,11,0))
import Data.Semigroup
#endif
import Data.Semigroup.Reducer
import Data.Set as Set hiding (empty, toList)
import Data.Text.Prettyprint.Doc as Pretty hiding (line)
import System.IO
import Text.Parser.Combinators
import Text.Parser.Char
import Text.Parser.LookAhead
import Text.Parser.Token
import Text.Trifecta.Combinators
import Text.Trifecta.Delta as Delta
import Text.Trifecta.Rendering
import Text.Trifecta.Result
import Text.Trifecta.Rope
import Text.Trifecta.Util.It
import Text.Trifecta.Util.Pretty
newtype Parser a = Parser
{ Parser a
-> forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
unparser :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
}
instance Functor Parser where
fmap :: (a -> b) -> Parser a -> Parser b
fmap f :: a -> b
f (Parser m :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m) = (forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser b
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser b)
-> (forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser b
forall a b. (a -> b) -> a -> b
$ \ eo :: b -> Err -> It Rope r
eo ee :: Err -> It Rope r
ee co :: b -> Set String -> Delta -> ByteString -> It Rope r
co -> (a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m (b -> Err -> It Rope r
eo (b -> Err -> It Rope r) -> (a -> b) -> a -> Err -> It Rope r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
f) Err -> It Rope r
ee (b -> Set String -> Delta -> ByteString -> It Rope r
co (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (a -> b) -> a -> Set String -> Delta -> ByteString -> It Rope r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
f)
{-# inlinable fmap #-}
a :: a
a <$ :: a -> Parser b -> Parser a
<$ Parser m :: forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ eo :: a -> Err -> It Rope r
eo ee :: Err -> It Rope r
ee co :: a -> Set String -> Delta -> ByteString -> It Rope r
co -> (b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m (\_ -> a -> Err -> It Rope r
eo a
a) Err -> It Rope r
ee (\_ -> a -> Set String -> Delta -> ByteString -> It Rope r
co a
a)
{-# inlinable (<$) #-}
instance Applicative Parser where
pure :: a -> Parser a
pure a :: a
a = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ eo :: a -> Err -> It Rope r
eo _ _ _ _ _ -> a -> Err -> It Rope r
eo a
a Err
forall a. Monoid a => a
mempty
{-# inlinable pure #-}
<*> :: Parser (a -> b) -> Parser a -> Parser b
(<*>) = Parser (a -> b) -> Parser a -> Parser b
forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap
{-# inlinable (<*>) #-}
instance Alternative Parser where
empty :: Parser a
empty = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \_ ee :: Err -> It Rope r
ee _ _ _ _ -> Err -> It Rope r
ee Err
forall a. Monoid a => a
mempty
{-# inlinable empty #-}
Parser m :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m <|> :: Parser a -> Parser a -> Parser a
<|> Parser n :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
n = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ eo :: a -> Err -> It Rope r
eo ee :: Err -> It Rope r
ee co :: a -> Set String -> Delta -> ByteString -> It Rope r
co ce :: ErrInfo -> It Rope r
ce d :: Delta
d bs :: ByteString
bs ->
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m a -> Err -> It Rope r
eo (\e :: Err
e -> (a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
n (\a :: a
a e' :: Err
e' -> a -> Err -> It Rope r
eo a
a (Err
e Err -> Err -> Err
forall a. Semigroup a => a -> a -> a
<> Err
e')) (\e' :: Err
e' -> Err -> It Rope r
ee (Err
e Err -> Err -> Err
forall a. Semigroup a => a -> a -> a
<> Err
e')) a -> Set String -> Delta -> ByteString -> It Rope r
co ErrInfo -> It Rope r
ce Delta
d ByteString
bs) a -> Set String -> Delta -> ByteString -> It Rope r
co ErrInfo -> It Rope r
ce Delta
d ByteString
bs
{-# inlinable (<|>) #-}
many :: Parser a -> Parser [a]
many p :: Parser a
p = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse ([a] -> [a]) -> Parser [a] -> Parser [a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (a -> [a] -> [a]) -> Parser a -> Parser [a]
forall a. (a -> [a] -> [a]) -> Parser a -> Parser [a]
manyAccum (:) Parser a
p
{-# inlinable many #-}
some :: Parser a -> Parser [a]
some p :: Parser a
p = (:) (a -> [a] -> [a]) -> Parser a -> Parser ([a] -> [a])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser a
p Parser ([a] -> [a]) -> Parser [a] -> Parser [a]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
Alternative.many Parser a
p
instance Semigroup a => Semigroup (Parser a) where
<> :: Parser a -> Parser a -> Parser a
(<>) = (a -> a -> a) -> Parser a -> Parser a -> Parser a
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> a -> a
forall a. Semigroup a => a -> a -> a
(<>)
{-# inlinable (<>) #-}
instance (Semigroup a, Monoid a) => Monoid (Parser a) where
mappend :: Parser a -> Parser a -> Parser a
mappend = Parser a -> Parser a -> Parser a
forall a. Semigroup a => a -> a -> a
(<>)
{-# inlinable mappend #-}
mempty :: Parser a
mempty = a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
forall a. Monoid a => a
mempty
{-# inlinable mempty #-}
instance Monad Parser where
return :: a -> Parser a
return = a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
{-# inlinable return #-}
Parser m :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m >>= :: Parser a -> (a -> Parser b) -> Parser b
>>= k :: a -> Parser b
k = (forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser b
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser b)
-> (forall r.
(b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser b
forall a b. (a -> b) -> a -> b
$ \ eo :: b -> Err -> It Rope r
eo ee :: Err -> It Rope r
ee co :: b -> Set String -> Delta -> ByteString -> It Rope r
co ce :: ErrInfo -> It Rope r
ce d :: Delta
d bs :: ByteString
bs ->
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m
(\a :: a
a e :: Err
e -> Parser b
-> (b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall a.
Parser a
-> forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
unparser (a -> Parser b
k a
a) (\b :: b
b e' :: Err
e' -> b -> Err -> It Rope r
eo b
b (Err
e Err -> Err -> Err
forall a. Semigroup a => a -> a -> a
<> Err
e')) (\e' :: Err
e' -> Err -> It Rope r
ee (Err
e Err -> Err -> Err
forall a. Semigroup a => a -> a -> a
<> Err
e')) b -> Set String -> Delta -> ByteString -> It Rope r
co ErrInfo -> It Rope r
ce Delta
d ByteString
bs)
Err -> It Rope r
ee
(\a :: a
a es :: Set String
es d' :: Delta
d' bs' :: ByteString
bs' -> Parser b
-> (b -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (b -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall a.
Parser a
-> forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
unparser (a -> Parser b
k a
a)
(\b :: b
b e' :: Err
e' -> b -> Set String -> Delta -> ByteString -> It Rope r
co b
b (Set String
es Set String -> Set String -> Set String
forall a. Semigroup a => a -> a -> a
<> Err -> Set String
_expected Err
e') Delta
d' ByteString
bs')
(\e :: Err
e ->
let errDoc :: Doc AnsiStyle
errDoc = Rendering -> Err -> Doc AnsiStyle
explain (Delta -> ByteString -> Rendering
renderingCaret Delta
d' ByteString
bs') Err
e { _expected :: Set String
_expected = Err -> Set String
_expected Err
e Set String -> Set String -> Set String
forall a. Semigroup a => a -> a -> a
<> Set String
es }
errDelta :: [Delta]
errDelta = Err -> [Delta]
_finalDeltas Err
e
in ErrInfo -> It Rope r
ce (ErrInfo -> It Rope r) -> ErrInfo -> It Rope r
forall a b. (a -> b) -> a -> b
$ Doc AnsiStyle -> [Delta] -> ErrInfo
ErrInfo Doc AnsiStyle
errDoc (Delta
d' Delta -> [Delta] -> [Delta]
forall a. a -> [a] -> [a]
: [Delta]
errDelta)
)
b -> Set String -> Delta -> ByteString -> It Rope r
co ErrInfo -> It Rope r
ce
Delta
d' ByteString
bs')
ErrInfo -> It Rope r
ce Delta
d ByteString
bs
{-# inlinable (>>=) #-}
>> :: Parser a -> Parser b -> Parser b
(>>) = Parser a -> Parser b -> Parser b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>)
{-# inlinable (>>) #-}
#if !(MIN_VERSION_base(4,13,0))
fail = Fail.fail
{-# inlinable fail #-}
#endif
instance Fail.MonadFail Parser where
fail :: String -> Parser a
fail s :: String
s = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ _ ee :: Err -> It Rope r
ee _ _ _ _ -> Err -> It Rope r
ee (String -> Err
failed String
s)
{-# inlinable fail #-}
instance MonadPlus Parser where
mzero :: Parser a
mzero = Parser a
forall (f :: * -> *) a. Alternative f => f a
empty
{-# inlinable mzero #-}
mplus :: Parser a -> Parser a -> Parser a
mplus = Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
(<|>)
{-# inlinable mplus #-}
manyAccum :: (a -> [a] -> [a]) -> Parser a -> Parser [a]
manyAccum :: (a -> [a] -> [a]) -> Parser a -> Parser [a]
manyAccum f :: a -> [a] -> [a]
f (Parser p :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
p) = (forall r.
([a] -> Err -> It Rope r)
-> (Err -> It Rope r)
-> ([a] -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser [a]
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
([a] -> Err -> It Rope r)
-> (Err -> It Rope r)
-> ([a] -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser [a])
-> (forall r.
([a] -> Err -> It Rope r)
-> (Err -> It Rope r)
-> ([a] -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser [a]
forall a b. (a -> b) -> a -> b
$ \eo :: [a] -> Err -> It Rope r
eo _ co :: [a] -> Set String -> Delta -> ByteString -> It Rope r
co ce :: ErrInfo -> It Rope r
ce d :: Delta
d bs :: ByteString
bs ->
let walk :: [a] -> a -> Set String -> Delta -> ByteString -> It Rope r
walk xs :: [a]
xs x :: a
x es :: Set String
es d' :: Delta
d' bs' :: ByteString
bs' = (a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
p (Delta -> ByteString -> a -> Err -> It Rope r
forall p. Delta -> ByteString -> p -> Err -> It Rope r
manyErr Delta
d' ByteString
bs') (\e :: Err
e -> [a] -> Set String -> Delta -> ByteString -> It Rope r
co (a -> [a] -> [a]
f a
x [a]
xs) (Err -> Set String
_expected Err
e Set String -> Set String -> Set String
forall a. Semigroup a => a -> a -> a
<> Set String
es) Delta
d' ByteString
bs') ([a] -> a -> Set String -> Delta -> ByteString -> It Rope r
walk (a -> [a] -> [a]
f a
x [a]
xs)) ErrInfo -> It Rope r
ce Delta
d' ByteString
bs'
manyErr :: Delta -> ByteString -> p -> Err -> It Rope r
manyErr d' :: Delta
d' bs' :: ByteString
bs' _ e :: Err
e = ErrInfo -> It Rope r
ce (Doc AnsiStyle -> [Delta] -> ErrInfo
ErrInfo Doc AnsiStyle
errDoc [Delta
d'])
where errDoc :: Doc AnsiStyle
errDoc = Rendering -> Err -> Doc AnsiStyle
explain (Delta -> ByteString -> Rendering
renderingCaret Delta
d' ByteString
bs') (Err
e Err -> Err -> Err
forall a. Semigroup a => a -> a -> a
<> String -> Err
failed "'many' applied to a parser that accepted an empty string")
in (a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
p (Delta -> ByteString -> a -> Err -> It Rope r
forall p. Delta -> ByteString -> p -> Err -> It Rope r
manyErr Delta
d ByteString
bs) ([a] -> Err -> It Rope r
eo []) ([a] -> a -> Set String -> Delta -> ByteString -> It Rope r
walk []) ErrInfo -> It Rope r
ce Delta
d ByteString
bs
liftIt :: It Rope a -> Parser a
liftIt :: It Rope a -> Parser a
liftIt m :: It Rope a
m = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ eo :: a -> Err -> It Rope r
eo _ _ _ _ _ -> do
a
a <- It Rope a
m
a -> Err -> It Rope r
eo a
a Err
forall a. Monoid a => a
mempty
{-# inlinable liftIt #-}
instance Parsing Parser where
try :: Parser a -> Parser a
try (Parser m :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m) = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ eo :: a -> Err -> It Rope r
eo ee :: Err -> It Rope r
ee co :: a -> Set String -> Delta -> ByteString -> It Rope r
co _ -> (a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m a -> Err -> It Rope r
eo Err -> It Rope r
ee a -> Set String -> Delta -> ByteString -> It Rope r
co (\_ -> Err -> It Rope r
ee Err
forall a. Monoid a => a
mempty)
{-# inlinable try #-}
Parser m :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m <?> :: Parser a -> String -> Parser a
<?> nm :: String
nm = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ eo :: a -> Err -> It Rope r
eo ee :: Err -> It Rope r
ee -> (a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m
(\a :: a
a e :: Err
e -> a -> Err -> It Rope r
eo a
a (if Maybe (Doc AnsiStyle) -> Bool
forall a. Maybe a -> Bool
isJust (Err -> Maybe (Doc AnsiStyle)
_reason Err
e) then Err
e { _expected :: Set String
_expected = String -> Set String
forall a. a -> Set a
Set.singleton String
nm } else Err
e))
(\e :: Err
e -> Err -> It Rope r
ee Err
e { _expected :: Set String
_expected = String -> Set String
forall a. a -> Set a
Set.singleton String
nm })
{-# inlinable (<?>) #-}
skipMany :: Parser a -> Parser ()
skipMany p :: Parser a
p = () () -> Parser [a] -> Parser ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (a -> [a] -> [a]) -> Parser a -> Parser [a]
forall a. (a -> [a] -> [a]) -> Parser a -> Parser [a]
manyAccum (\_ _ -> []) Parser a
p
{-# inlinable skipMany #-}
unexpected :: String -> Parser a
unexpected s :: String
s = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ _ ee :: Err -> It Rope r
ee _ _ _ _ -> Err -> It Rope r
ee (Err -> It Rope r) -> Err -> It Rope r
forall a b. (a -> b) -> a -> b
$ String -> Err
failed (String -> Err) -> String -> Err
forall a b. (a -> b) -> a -> b
$ "unexpected " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
s
{-# inlinable unexpected #-}
eof :: Parser ()
eof = Parser Char -> Parser ()
forall (m :: * -> *) a. (Parsing m, Show a) => m a -> m ()
notFollowedBy Parser Char
forall (m :: * -> *). CharParsing m => m Char
anyChar Parser () -> String -> Parser ()
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> "end of input"
{-# inlinable eof #-}
notFollowedBy :: Parser a -> Parser ()
notFollowedBy p :: Parser a
p = Parser () -> Parser ()
forall (m :: * -> *) a. Parsing m => m a -> m a
try (Parser a -> Parser (Maybe a)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser a
p Parser (Maybe a) -> (Maybe a -> Parser ()) -> Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Parser () -> (a -> Parser ()) -> Maybe a -> Parser ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (() -> Parser ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()) (String -> Parser ()
forall (m :: * -> *) a. Parsing m => String -> m a
unexpected (String -> Parser ()) -> (a -> String) -> a -> Parser ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show))
{-# inlinable notFollowedBy #-}
instance Errable Parser where
raiseErr :: Err -> Parser a
raiseErr e :: Err
e = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \ _ ee :: Err -> It Rope r
ee _ _ _ _ -> Err -> It Rope r
ee Err
e
{-# inlinable raiseErr #-}
instance LookAheadParsing Parser where
lookAhead :: Parser a -> Parser a
lookAhead (Parser m :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m) = (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a)
-> (forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
forall a b. (a -> b) -> a -> b
$ \eo :: a -> Err -> It Rope r
eo ee :: Err -> It Rope r
ee _ -> (a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
m a -> Err -> It Rope r
eo Err -> It Rope r
ee (\a :: a
a _ _ _ -> a -> Err -> It Rope r
eo a
a Err
forall a. Monoid a => a
mempty)
{-# inlinable lookAhead #-}
instance CharParsing Parser where
satisfy :: (Char -> Bool) -> Parser Char
satisfy f :: Char -> Bool
f = (forall r.
(Char -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Char -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Char
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(Char -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Char -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Char)
-> (forall r.
(Char -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Char -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Char
forall a b. (a -> b) -> a -> b
$ \ _ ee :: Err -> It Rope r
ee co :: Char -> Set String -> Delta -> ByteString -> It Rope r
co _ d :: Delta
d bs :: ByteString
bs ->
case ByteString -> Maybe (Char, ByteString)
UTF8.uncons (ByteString -> Maybe (Char, ByteString))
-> ByteString -> Maybe (Char, ByteString)
forall a b. (a -> b) -> a -> b
$ Int -> ByteString -> ByteString
Strict.drop (Int64 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Delta -> Int64
columnByte Delta
d)) ByteString
bs of
Nothing -> Err -> It Rope r
ee (String -> Err
failed "unexpected EOF")
Just (c :: Char
c, xs :: ByteString
xs)
| Bool -> Bool
not (Char -> Bool
f Char
c) -> Err -> It Rope r
ee Err
forall a. Monoid a => a
mempty
| ByteString -> Bool
Strict.null ByteString
xs -> let !ddc :: Delta
ddc = Delta
d Delta -> Delta -> Delta
forall a. Semigroup a => a -> a -> a
<> Char -> Delta
forall t. HasDelta t => t -> Delta
delta Char
c
in It Rope (It Rope r) -> It Rope r
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (It Rope (It Rope r) -> It Rope r)
-> It Rope (It Rope r) -> It Rope r
forall a b. (a -> b) -> a -> b
$ It Rope r
-> (Delta -> ByteString -> It Rope r)
-> Delta
-> It Rope (It Rope r)
forall r. r -> (Delta -> ByteString -> r) -> Delta -> It Rope r
fillIt (Char -> Set String -> Delta -> ByteString -> It Rope r
co Char
c Set String
forall a. Monoid a => a
mempty Delta
ddc (if Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== '\n' then ByteString
forall a. Monoid a => a
mempty else ByteString
bs))
(Char -> Set String -> Delta -> ByteString -> It Rope r
co Char
c Set String
forall a. Monoid a => a
mempty)
Delta
ddc
| Bool
otherwise -> Char -> Set String -> Delta -> ByteString -> It Rope r
co Char
c Set String
forall a. Monoid a => a
mempty (Delta
d Delta -> Delta -> Delta
forall a. Semigroup a => a -> a -> a
<> Char -> Delta
forall t. HasDelta t => t -> Delta
delta Char
c) ByteString
bs
{-# inlinable satisfy #-}
instance TokenParsing Parser
instance DeltaParsing Parser where
line :: Parser ByteString
line = (forall r.
(ByteString -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (ByteString -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser ByteString
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(ByteString -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (ByteString -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser ByteString)
-> (forall r.
(ByteString -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (ByteString -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser ByteString
forall a b. (a -> b) -> a -> b
$ \eo :: ByteString -> Err -> It Rope r
eo _ _ _ _ bs :: ByteString
bs -> ByteString -> Err -> It Rope r
eo ByteString
bs Err
forall a. Monoid a => a
mempty
{-# inlinable line #-}
position :: Parser Delta
position = (forall r.
(Delta -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Delta -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Delta
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(Delta -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Delta -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Delta)
-> (forall r.
(Delta -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Delta -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Delta
forall a b. (a -> b) -> a -> b
$ \eo :: Delta -> Err -> It Rope r
eo _ _ _ d :: Delta
d _ -> Delta -> Err -> It Rope r
eo Delta
d Err
forall a. Monoid a => a
mempty
{-# inlinable position #-}
rend :: Parser Rendering
rend = (forall r.
(Rendering -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Rendering -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Rendering
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(Rendering -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Rendering -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Rendering)
-> (forall r.
(Rendering -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (Rendering -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser Rendering
forall a b. (a -> b) -> a -> b
$ \eo :: Rendering -> Err -> It Rope r
eo _ _ _ d :: Delta
d bs :: ByteString
bs -> Rendering -> Err -> It Rope r
eo (Delta -> ByteString -> Rendering
forall s. Source s => Delta -> s -> Rendering
rendered Delta
d ByteString
bs) Err
forall a. Monoid a => a
mempty
{-# inlinable rend #-}
slicedWith :: (a -> ByteString -> r) -> Parser a -> Parser r
slicedWith f :: a -> ByteString -> r
f p :: Parser a
p = do
Delta
m <- Parser Delta
forall (m :: * -> *). DeltaParsing m => m Delta
position
a
a <- Parser a
p
Delta
r <- Parser Delta
forall (m :: * -> *). DeltaParsing m => m Delta
position
a -> ByteString -> r
f a
a (ByteString -> r) -> Parser ByteString -> Parser r
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> It Rope ByteString -> Parser ByteString
forall a. It Rope a -> Parser a
liftIt (Delta -> Delta -> It Rope ByteString
sliceIt Delta
m Delta
r)
{-# inlinable slicedWith #-}
instance MarkParsing Delta Parser where
mark :: Parser Delta
mark = Parser Delta
forall (m :: * -> *). DeltaParsing m => m Delta
position
{-# inlinable mark #-}
release :: Delta -> Parser ()
release d' :: Delta
d' = (forall r.
(() -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (() -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser ()
forall a.
(forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser a
Parser ((forall r.
(() -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (() -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser ())
-> (forall r.
(() -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (() -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r)
-> Parser ()
forall a b. (a -> b) -> a -> b
$ \_ ee :: Err -> It Rope r
ee co :: () -> Set String -> Delta -> ByteString -> It Rope r
co _ d :: Delta
d bs :: ByteString
bs -> do
Maybe ByteString
mbs <- Delta -> It Rope (Maybe ByteString)
rewindIt Delta
d'
case Maybe ByteString
mbs of
Just bs' :: ByteString
bs' -> () -> Set String -> Delta -> ByteString -> It Rope r
co () Set String
forall a. Monoid a => a
mempty Delta
d' ByteString
bs'
Nothing
| Delta -> Int64
forall t. HasBytes t => t -> Int64
bytes Delta
d' Int64 -> Int64 -> Bool
forall a. Eq a => a -> a -> Bool
== Delta -> Int64
forall t. HasBytes t => t -> Int64
bytes (Delta -> Delta
rewind Delta
d) Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ Int -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString -> Int
Strict.length ByteString
bs) -> if Delta -> Delta -> Bool
forall s t. (HasDelta s, HasDelta t) => s -> t -> Bool
near Delta
d Delta
d'
then () -> Set String -> Delta -> ByteString -> It Rope r
co () Set String
forall a. Monoid a => a
mempty Delta
d' ByteString
bs
else () -> Set String -> Delta -> ByteString -> It Rope r
co () Set String
forall a. Monoid a => a
mempty Delta
d' ByteString
forall a. Monoid a => a
mempty
| Bool
otherwise -> Err -> It Rope r
ee Err
forall a. Monoid a => a
mempty
data Step a
= StepDone !Rope a
| StepFail !Rope ErrInfo
| StepCont !Rope (Result a) (Rope -> Step a)
instance Show a => Show (Step a) where
showsPrec :: Int -> Step a -> String -> String
showsPrec d :: Int
d (StepDone r :: Rope
r a :: a
a) = Bool -> (String -> String) -> String -> String
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 10) ((String -> String) -> String -> String)
-> (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$
String -> String -> String
showString "StepDone " (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Rope -> String -> String
forall a. Show a => Int -> a -> String -> String
showsPrec 11 Rope
r (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> String -> String
showChar ' ' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a -> String -> String
forall a. Show a => Int -> a -> String -> String
showsPrec 11 a
a
showsPrec d :: Int
d (StepFail r :: Rope
r xs :: ErrInfo
xs) = Bool -> (String -> String) -> String -> String
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 10) ((String -> String) -> String -> String)
-> (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$
String -> String -> String
showString "StepFail " (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Rope -> String -> String
forall a. Show a => Int -> a -> String -> String
showsPrec 11 Rope
r (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> String -> String
showChar ' ' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ErrInfo -> String -> String
forall a. Show a => Int -> a -> String -> String
showsPrec 11 ErrInfo
xs
showsPrec d :: Int
d (StepCont r :: Rope
r fin :: Result a
fin _) = Bool -> (String -> String) -> String -> String
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 10) ((String -> String) -> String -> String)
-> (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$
String -> String -> String
showString "StepCont " (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Rope -> String -> String
forall a. Show a => Int -> a -> String -> String
showsPrec 11 Rope
r (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> String -> String
showChar ' ' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Result a -> String -> String
forall a. Show a => Int -> a -> String -> String
showsPrec 11 Result a
fin (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
showString " ..."
instance Functor Step where
fmap :: (a -> b) -> Step a -> Step b
fmap f :: a -> b
f (StepDone r :: Rope
r a :: a
a) = Rope -> b -> Step b
forall a. Rope -> a -> Step a
StepDone Rope
r (a -> b
f a
a)
fmap _ (StepFail r :: Rope
r xs :: ErrInfo
xs) = Rope -> ErrInfo -> Step b
forall a. Rope -> ErrInfo -> Step a
StepFail Rope
r ErrInfo
xs
fmap f :: a -> b
f (StepCont r :: Rope
r z :: Result a
z k :: Rope -> Step a
k) = Rope -> Result b -> (Rope -> Step b) -> Step b
forall a. Rope -> Result a -> (Rope -> Step a) -> Step a
StepCont Rope
r ((a -> b) -> Result a -> Result b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f Result a
z) ((a -> b) -> Step a -> Step b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f (Step a -> Step b) -> (Rope -> Step a) -> Rope -> Step b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rope -> Step a
k)
feed :: Reducer t Rope => t -> Step r -> Step r
feed :: t -> Step r -> Step r
feed t :: t
t (StepDone r :: Rope
r a :: r
a) = Rope -> r -> Step r
forall a. Rope -> a -> Step a
StepDone (Rope -> t -> Rope
forall c m. Reducer c m => m -> c -> m
snoc Rope
r t
t) r
a
feed t :: t
t (StepFail r :: Rope
r xs :: ErrInfo
xs) = Rope -> ErrInfo -> Step r
forall a. Rope -> ErrInfo -> Step a
StepFail (Rope -> t -> Rope
forall c m. Reducer c m => m -> c -> m
snoc Rope
r t
t) ErrInfo
xs
feed t :: t
t (StepCont r :: Rope
r _ k :: Rope -> Step r
k) = Rope -> Step r
k (Rope -> t -> Rope
forall c m. Reducer c m => m -> c -> m
snoc Rope
r t
t)
{-# inlinable feed #-}
starve :: Step a -> Result a
starve :: Step a -> Result a
starve (StepDone _ a :: a
a) = a -> Result a
forall a. a -> Result a
Success a
a
starve (StepFail _ xs :: ErrInfo
xs) = ErrInfo -> Result a
forall a. ErrInfo -> Result a
Failure ErrInfo
xs
starve (StepCont _ z :: Result a
z _) = Result a
z
{-# inlinable starve #-}
stepResult :: Rope -> Result a -> Step a
stepResult :: Rope -> Result a -> Step a
stepResult r :: Rope
r (Success a :: a
a) = Rope -> a -> Step a
forall a. Rope -> a -> Step a
StepDone Rope
r a
a
stepResult r :: Rope
r (Failure xs :: ErrInfo
xs) = Rope -> ErrInfo -> Step a
forall a. Rope -> ErrInfo -> Step a
StepFail Rope
r ErrInfo
xs
{-# inlinable stepResult #-}
stepIt :: It Rope a -> Step a
stepIt :: It Rope a -> Step a
stepIt = Rope -> It Rope a -> Step a
forall a. Rope -> It Rope a -> Step a
go Rope
forall a. Monoid a => a
mempty where
go :: Rope -> It Rope a -> Step a
go r :: Rope
r m :: It Rope a
m = case It Rope a -> Rope -> It Rope a
forall r a. It r a -> r -> It r a
simplifyIt It Rope a
m Rope
r of
Pure a :: a
a -> Rope -> a -> Step a
forall a. Rope -> a -> Step a
StepDone Rope
r a
a
It a :: a
a k :: Rope -> It Rope a
k -> Rope -> Result a -> (Rope -> Step a) -> Step a
forall a. Rope -> Result a -> (Rope -> Step a) -> Step a
StepCont Rope
r (a -> Result a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
a) ((Rope -> Step a) -> Step a) -> (Rope -> Step a) -> Step a
forall a b. (a -> b) -> a -> b
$ \r' :: Rope
r' -> Rope -> It Rope a -> Step a
go Rope
r' (Rope -> It Rope a
k Rope
r')
{-# inlinable stepIt #-}
data Stepping a
= EO a Err
| EE Err
| CO a (Set String) Delta ByteString
| CE ErrInfo
stepParser
:: Parser a
-> Delta
-> Step a
stepParser :: Parser a -> Delta -> Step a
stepParser (Parser p :: forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
p) d0 :: Delta
d0 = Step (Result a) -> Step a
forall a. Step (Result a) -> Step a
joinStep (Step (Result a) -> Step a) -> Step (Result a) -> Step a
forall a b. (a -> b) -> a -> b
$ It Rope (Result a) -> Step (Result a)
forall a. It Rope a -> Step a
stepIt (It Rope (Result a) -> Step (Result a))
-> It Rope (Result a) -> Step (Result a)
forall a b. (a -> b) -> a -> b
$ do
ByteString
bs0 <- ByteString -> Maybe ByteString -> ByteString
forall a. a -> Maybe a -> a
fromMaybe ByteString
forall a. Monoid a => a
mempty (Maybe ByteString -> ByteString)
-> It Rope (Maybe ByteString) -> It Rope ByteString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Delta -> It Rope (Maybe ByteString)
rewindIt Delta
d0
ByteString -> Stepping a -> Result a
forall a. ByteString -> Stepping a -> Result a
go ByteString
bs0 (Stepping a -> Result a)
-> It Rope (Stepping a) -> It Rope (Result a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (a -> Err -> It Rope (Stepping a))
-> (Err -> It Rope (Stepping a))
-> (a -> Set String -> Delta -> ByteString -> It Rope (Stepping a))
-> (ErrInfo -> It Rope (Stepping a))
-> Delta
-> ByteString
-> It Rope (Stepping a)
forall r.
(a -> Err -> It Rope r)
-> (Err -> It Rope r)
-> (a -> Set String -> Delta -> ByteString -> It Rope r)
-> (ErrInfo -> It Rope r)
-> Delta
-> ByteString
-> It Rope r
p a -> Err -> It Rope (Stepping a)
forall a r. a -> Err -> It r (Stepping a)
eo Err -> It Rope (Stepping a)
forall r a. Err -> It r (Stepping a)
ee a -> Set String -> Delta -> ByteString -> It Rope (Stepping a)
forall a r.
a -> Set String -> Delta -> ByteString -> It r (Stepping a)
co ErrInfo -> It Rope (Stepping a)
forall r a. ErrInfo -> It r (Stepping a)
ce Delta
d0 ByteString
bs0
where
eo :: a -> Err -> It r (Stepping a)
eo a :: a
a e :: Err
e = Stepping a -> It r (Stepping a)
forall r a. a -> It r a
Pure (a -> Err -> Stepping a
forall a. a -> Err -> Stepping a
EO a
a Err
e)
ee :: Err -> It r (Stepping a)
ee e :: Err
e = Stepping a -> It r (Stepping a)
forall r a. a -> It r a
Pure (Err -> Stepping a
forall a. Err -> Stepping a
EE Err
e)
co :: a -> Set String -> Delta -> ByteString -> It r (Stepping a)
co a :: a
a es :: Set String
es d' :: Delta
d' bs :: ByteString
bs = Stepping a -> It r (Stepping a)
forall r a. a -> It r a
Pure (a -> Set String -> Delta -> ByteString -> Stepping a
forall a. a -> Set String -> Delta -> ByteString -> Stepping a
CO a
a Set String
es Delta
d' ByteString
bs)
ce :: ErrInfo -> It r (Stepping a)
ce errInf :: ErrInfo
errInf = Stepping a -> It r (Stepping a)
forall r a. a -> It r a
Pure (ErrInfo -> Stepping a
forall a. ErrInfo -> Stepping a
CE ErrInfo
errInf)
go :: ByteString -> Stepping a -> Result a
go :: ByteString -> Stepping a -> Result a
go _ (EO a :: a
a _) = a -> Result a
forall a. a -> Result a
Success a
a
go bs0 :: ByteString
bs0 (EE e :: Err
e) = ErrInfo -> Result a
forall a. ErrInfo -> Result a
Failure (ErrInfo -> Result a) -> ErrInfo -> Result a
forall a b. (a -> b) -> a -> b
$
let errDoc :: Doc AnsiStyle
errDoc = Rendering -> Err -> Doc AnsiStyle
explain (Delta -> ByteString -> Rendering
renderingCaret Delta
d0 ByteString
bs0) Err
e
in Doc AnsiStyle -> [Delta] -> ErrInfo
ErrInfo Doc AnsiStyle
errDoc (Delta
d0 Delta -> [Delta] -> [Delta]
forall a. a -> [a] -> [a]
: Err -> [Delta]
_finalDeltas Err
e)
go _ (CO a :: a
a _ _ _) = a -> Result a
forall a. a -> Result a
Success a
a
go _ (CE e :: ErrInfo
e) = ErrInfo -> Result a
forall a. ErrInfo -> Result a
Failure ErrInfo
e
joinStep :: Step (Result a) -> Step a
joinStep :: Step (Result a) -> Step a
joinStep (StepDone r :: Rope
r (Success a :: a
a)) = Rope -> a -> Step a
forall a. Rope -> a -> Step a
StepDone Rope
r a
a
joinStep (StepDone r :: Rope
r (Failure e :: ErrInfo
e)) = Rope -> ErrInfo -> Step a
forall a. Rope -> ErrInfo -> Step a
StepFail Rope
r ErrInfo
e
joinStep (StepFail r :: Rope
r e :: ErrInfo
e) = Rope -> ErrInfo -> Step a
forall a. Rope -> ErrInfo -> Step a
StepFail Rope
r ErrInfo
e
joinStep (StepCont r :: Rope
r a :: Result (Result a)
a k :: Rope -> Step (Result a)
k) = Rope -> Result a -> (Rope -> Step a) -> Step a
forall a. Rope -> Result a -> (Rope -> Step a) -> Step a
StepCont Rope
r (Result (Result a) -> Result a
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join Result (Result a)
a) (Step (Result a) -> Step a
forall a. Step (Result a) -> Step a
joinStep (Step (Result a) -> Step a)
-> (Rope -> Step (Result a)) -> Rope -> Step a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Rope -> Step (Result a)
k)
{-# inlinable joinStep #-}
runParser
:: Reducer t Rope
=> Parser a
-> Delta
-> t
-> Result a
runParser :: Parser a -> Delta -> t -> Result a
runParser p :: Parser a
p d :: Delta
d bs :: t
bs = Step a -> Result a
forall a. Step a -> Result a
starve (Step a -> Result a) -> Step a -> Result a
forall a b. (a -> b) -> a -> b
$ t -> Step a -> Step a
forall t r. Reducer t Rope => t -> Step r -> Step r
feed t
bs (Step a -> Step a) -> Step a -> Step a
forall a b. (a -> b) -> a -> b
$ Parser a -> Delta -> Step a
forall a. Parser a -> Delta -> Step a
stepParser Parser a
p Delta
d
{-# inlinable runParser #-}
parseFromFile :: MonadIO m => Parser a -> String -> m (Maybe a)
parseFromFile :: Parser a -> String -> m (Maybe a)
parseFromFile p :: Parser a
p fn :: String
fn = do
Result a
result <- Parser a -> String -> m (Result a)
forall (m :: * -> *) a.
MonadIO m =>
Parser a -> String -> m (Result a)
parseFromFileEx Parser a
p String
fn
case Result a
result of
Success a :: a
a -> Maybe a -> m (Maybe a)
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> Maybe a
forall a. a -> Maybe a
Just a
a)
Failure xs :: ErrInfo
xs -> do
IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Handle -> SimpleDocStream AnsiStyle -> IO ()
renderIO Handle
stdout (SimpleDocStream AnsiStyle -> IO ())
-> SimpleDocStream AnsiStyle -> IO ()
forall a b. (a -> b) -> a -> b
$ Double -> Int -> Doc AnsiStyle -> SimpleDocStream AnsiStyle
renderPretty 0.8 80 (Doc AnsiStyle -> SimpleDocStream AnsiStyle)
-> Doc AnsiStyle -> SimpleDocStream AnsiStyle
forall a b. (a -> b) -> a -> b
$ (ErrInfo -> Doc AnsiStyle
_errDoc ErrInfo
xs) Doc AnsiStyle -> Doc AnsiStyle -> Doc AnsiStyle
forall a. Semigroup a => a -> a -> a
<> Doc AnsiStyle
forall ann. Doc ann
line'
Maybe a -> m (Maybe a)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe a
forall a. Maybe a
Nothing
parseFromFileEx :: MonadIO m => Parser a -> String -> m (Result a)
parseFromFileEx :: Parser a -> String -> m (Result a)
parseFromFileEx p :: Parser a
p fn :: String
fn = do
ByteString
s <- IO ByteString -> m ByteString
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ByteString -> m ByteString) -> IO ByteString -> m ByteString
forall a b. (a -> b) -> a -> b
$ String -> IO ByteString
Strict.readFile String
fn
Result a -> m (Result a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Result a -> m (Result a)) -> Result a -> m (Result a)
forall a b. (a -> b) -> a -> b
$ Parser a -> Delta -> ByteString -> Result a
forall a. Parser a -> Delta -> ByteString -> Result a
parseByteString Parser a
p (ByteString -> Int64 -> Int64 -> Int64 -> Int64 -> Delta
Directed (String -> ByteString
UTF8.fromString String
fn) 0 0 0 0) ByteString
s
parseByteString
:: Parser a
-> Delta
-> UTF8.ByteString
-> Result a
parseByteString :: Parser a -> Delta -> ByteString -> Result a
parseByteString = Parser a -> Delta -> ByteString -> Result a
forall t a. Reducer t Rope => Parser a -> Delta -> t -> Result a
runParser
parseString
:: Parser a
-> Delta
-> String
-> Result a
parseString :: Parser a -> Delta -> String -> Result a
parseString = Parser a -> Delta -> String -> Result a
forall t a. Reducer t Rope => Parser a -> Delta -> t -> Result a
runParser
parseTest :: (MonadIO m, Show a) => Parser a -> String -> m ()
parseTest :: Parser a -> String -> m ()
parseTest p :: Parser a
p s :: String
s = case Parser a -> Delta -> ByteString -> Result a
forall a. Parser a -> Delta -> ByteString -> Result a
parseByteString Parser a
p Delta
forall a. Monoid a => a
mempty (String -> ByteString
UTF8.fromString String
s) of
Failure xs :: ErrInfo
xs -> IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Handle -> SimpleDocStream AnsiStyle -> IO ()
renderIO Handle
stdout (SimpleDocStream AnsiStyle -> IO ())
-> SimpleDocStream AnsiStyle -> IO ()
forall a b. (a -> b) -> a -> b
$ Double -> Int -> Doc AnsiStyle -> SimpleDocStream AnsiStyle
renderPretty 0.8 80 (Doc AnsiStyle -> SimpleDocStream AnsiStyle)
-> Doc AnsiStyle -> SimpleDocStream AnsiStyle
forall a b. (a -> b) -> a -> b
$ (ErrInfo -> Doc AnsiStyle
_errDoc ErrInfo
xs) Doc AnsiStyle -> Doc AnsiStyle -> Doc AnsiStyle
forall a. Semigroup a => a -> a -> a
<> Doc AnsiStyle
forall ann. Doc ann
line'
Success a :: a
a -> IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (a -> IO ()
forall a. Show a => a -> IO ()
print a
a)