{-# LANGUAGE Rank2Types #-} module Data.Attoparsec.Machine where import Data.Attoparsec.Internal.Types (IResult (..)) import Data.Machine (Is (Refl), MachineT (..), ProcessT, Step (Await, Yield), stopped) streamParserWith :: (Monoid i, Monad m) => (i -> IResult i a) -> ProcessT m i (Either String a) streamParserWith :: (i -> IResult i a) -> ProcessT m i (Either String a) streamParserWith i -> IResult i a runParser = ProcessT m i (Either String a) start where start :: ProcessT m i (Either String a) start = m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a) forall (m :: * -> *) (k :: * -> *) o. m (Step k o (MachineT m k o)) -> MachineT m k o MachineT (m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a)) -> (Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a)))) -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> ProcessT m i (Either String a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) forall (m :: * -> *) a. Monad m => a -> m a return (Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> ProcessT m i (Either String a)) -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> ProcessT m i (Either String a) forall a b. (a -> b) -> a -> b $ (i -> ProcessT m i (Either String a)) -> Is i i -> ProcessT m i (Either String a) -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) forall (k :: * -> *) o r t. (t -> r) -> k t -> r -> Step k o r Await i -> ProcessT m i (Either String a) parse Is i i forall a. Is a a Refl ProcessT m i (Either String a) forall (k :: * -> *) b. Machine k b stopped parse :: i -> ProcessT m i (Either String a) parse i i = m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a) forall (m :: * -> *) (k :: * -> *) o. m (Step k o (MachineT m k o)) -> MachineT m k o MachineT (m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a)) -> (IResult i a -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a)))) -> IResult i a -> ProcessT m i (Either String a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) forall (m :: * -> *) a. Monad m => a -> m a return (Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a)))) -> (IResult i a -> Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> IResult i a -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) forall b c a. (b -> c) -> (a -> b) -> a -> c . IResult i a -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) f (IResult i a -> ProcessT m i (Either String a)) -> IResult i a -> ProcessT m i (Either String a) forall a b. (a -> b) -> a -> b $ i -> IResult i a runParser i i f :: IResult i a -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) f (Fail i _ [String] _ String e) = Either String a -> ProcessT m i (Either String a) -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) forall (k :: * -> *) o r. o -> r -> Step k o r Yield (String -> Either String a forall a b. a -> Either a b Left String e) ProcessT m i (Either String a) start f (Partial i -> IResult i a c) = (i -> ProcessT m i (Either String a)) -> Is i i -> ProcessT m i (Either String a) -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) forall (k :: * -> *) o r t. (t -> r) -> k t -> r -> Step k o r Await (m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a) forall (m :: * -> *) (k :: * -> *) o. m (Step k o (MachineT m k o)) -> MachineT m k o MachineT (m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a)) -> (i -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a)))) -> i -> ProcessT m i (Either String a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) forall (m :: * -> *) a. Monad m => a -> m a return (Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a)))) -> (i -> Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> i -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) forall b c a. (b -> c) -> (a -> b) -> a -> c . IResult i a -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) f (IResult i a -> Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> (i -> IResult i a) -> i -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) forall b c a. (b -> c) -> (a -> b) -> a -> c . i -> IResult i a c) Is i i forall a. Is a a Refl (ProcessT m i (Either String a) -> Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a) -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) forall a b. (a -> b) -> a -> b $ (m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a) forall (m :: * -> *) (k :: * -> *) o. m (Step k o (MachineT m k o)) -> MachineT m k o MachineT (m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> ProcessT m i (Either String a)) -> (IResult i a -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a)))) -> IResult i a -> ProcessT m i (Either String a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) forall (m :: * -> *) a. Monad m => a -> m a return (Step (Is i) (Either String a) (ProcessT m i (Either String a)) -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a)))) -> (IResult i a -> Step (Is i) (Either String a) (ProcessT m i (Either String a))) -> IResult i a -> m (Step (Is i) (Either String a) (ProcessT m i (Either String a))) forall b c a. (b -> c) -> (a -> b) -> a -> c . IResult i a -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) f (IResult i a -> ProcessT m i (Either String a)) -> IResult i a -> ProcessT m i (Either String a) forall a b. (a -> b) -> a -> b $ i -> IResult i a c i forall a. Monoid a => a mempty) f (Done i i a r) = Either String a -> ProcessT m i (Either String a) -> Step (Is i) (Either String a) (ProcessT m i (Either String a)) forall (k :: * -> *) o r. o -> r -> Step k o r Yield (a -> Either String a forall a b. b -> Either a b Right a r) (i -> ProcessT m i (Either String a) parse i i) processParserWith :: (Monoid i, Monad m) => (i -> IResult i a) -> ProcessT m i (Either String (i, a)) processParserWith :: (i -> IResult i a) -> ProcessT m i (Either String (i, a)) processParserWith i -> IResult i a runParser = m (Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a)))) -> ProcessT m i (Either String (i, a)) forall (m :: * -> *) (k :: * -> *) o. m (Step k o (MachineT m k o)) -> MachineT m k o MachineT (m (Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a)))) -> ProcessT m i (Either String (i, a))) -> (Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a))) -> m (Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a))))) -> Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a))) -> ProcessT m i (Either String (i, a)) forall b c a. (b -> c) -> (a -> b) -> a -> c . Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a))) -> m (Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a)))) forall (m :: * -> *) a. Monad m => a -> m a return (Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a))) -> ProcessT m i (Either String (i, a))) -> Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a))) -> ProcessT m i (Either String (i, a)) forall a b. (a -> b) -> a -> b $ (i -> ProcessT m i (Either String (i, a))) -> Is i i -> ProcessT m i (Either String (i, a)) -> Step (Is i) (Either String (i, a)) (ProcessT m i (Either String (i, a))) forall (k :: * -> *) o r t. (t -> r) -> k t -> r -> Step k o r Await i -> ProcessT m i (Either String (i, a)) forall (m :: * -> *). Monad m => i -> MachineT m (Is i) (Either String (i, a)) parse Is i i forall a. Is a a Refl ProcessT m i (Either String (i, a)) forall (k :: * -> *) b. Machine k b stopped where parse :: i -> MachineT m (Is i) (Either String (i, a)) parse i i = m (Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a)))) -> MachineT m (Is i) (Either String (i, a)) forall (m :: * -> *) (k :: * -> *) o. m (Step k o (MachineT m k o)) -> MachineT m k o MachineT (m (Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a)))) -> MachineT m (Is i) (Either String (i, a))) -> (IResult i a -> m (Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a))))) -> IResult i a -> MachineT m (Is i) (Either String (i, a)) forall b c a. (b -> c) -> (a -> b) -> a -> c . Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a))) -> m (Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a)))) forall (m :: * -> *) a. Monad m => a -> m a return (Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a))) -> m (Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a))))) -> (IResult i a -> Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a)))) -> IResult i a -> m (Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a)))) forall b c a. (b -> c) -> (a -> b) -> a -> c . IResult i a -> Step (Is i) (Either String (i, a)) (MachineT m (Is i) (Either String (i, a))) forall (m :: * -> *) a b (k :: * -> *). (Monad m, Monoid a) => IResult a b -> Step k (Either String (a, b)) (ProcessT m i (Either String (i, a))) f (IResult i a -> MachineT m (Is i) (Either String (i, a))) -> IResult i a -> MachineT m (Is i) (Either String (i, a)) forall a b. (a -> b) -> a -> b $ i -> IResult i a runParser i i f :: IResult a b -> Step k (Either String (a, b)) (ProcessT m i (Either String (i, a))) f (Fail a _ [String] _ String e) = Either String (a, b) -> ProcessT m i (Either String (i, a)) -> Step k (Either String (a, b)) (ProcessT m i (Either String (i, a))) forall (k :: * -> *) o r. o -> r -> Step k o r Yield (String -> Either String (a, b) forall a b. a -> Either a b Left String e) ((i -> IResult i a) -> ProcessT m i (Either String (i, a)) forall i (m :: * -> *) a. (Monoid i, Monad m) => (i -> IResult i a) -> ProcessT m i (Either String (i, a)) processParserWith i -> IResult i a runParser) f (Partial a -> IResult a b c) = IResult a b -> Step k (Either String (a, b)) (ProcessT m i (Either String (i, a))) f (IResult a b -> Step k (Either String (a, b)) (ProcessT m i (Either String (i, a)))) -> IResult a b -> Step k (Either String (a, b)) (ProcessT m i (Either String (i, a))) forall a b. (a -> b) -> a -> b $ a -> IResult a b c a forall a. Monoid a => a mempty f (Done a i b a) = Either String (a, b) -> ProcessT m i (Either String (i, a)) -> Step k (Either String (a, b)) (ProcessT m i (Either String (i, a))) forall (k :: * -> *) o r. o -> r -> Step k o r Yield ((a, b) -> Either String (a, b) forall a b. b -> Either a b Right (a i, b a)) ((i -> IResult i a) -> ProcessT m i (Either String (i, a)) forall i (m :: * -> *) a. (Monoid i, Monad m) => (i -> IResult i a) -> ProcessT m i (Either String (i, a)) processParserWith i -> IResult i a runParser)