@@ -574,21 +574,6 @@ parserDone st (K.Success _ _) =
574574 error $ "Bug: fromParserK: inside alternative: " ++ show st
575575parserDone _ (K.Failure e) = return $ K.Error e
576576
577−-- | When there is no more input to feed, extract the result from the Parser.
578−--
579−-- /Pre-release/
580−--
581−extractParse :: Monad m => (Maybe a -> m (K.Step m a b)) -> m (Step s b)
582−extractParse cont = do
583− r <- cont Nothing
584− case r of
585− K.Done n b -> return (Done n b)
586− K.Partial _ _ -> error "Bug: extractParse got Partial"
587− K.Continue _ cont1 -> extractParse cont1
588− K.Error e -> return $ Error e
589−
590−data FromParserK b c = FPKDone !Int !b | FPKCont c
591−
592577-- | Convert a CPS style 'K.Parser' to a direct style 'Parser'.
593578--
594579-- "initial" returns a continuation which can be called one input at a time
@@ -605,28 +590,26 @@ fromParserK parser = Parser step initial extract
605590 initial = do
606591 r <- K.runParser parser 0 (0,0) parserDone
607592 return $ case r of
608− K.Done n b -> IPartial $ FPKDone n b
593+ K.Done n b -> assert (n == 0) (IDone b)
609594 K.Error e -> IError e
610− K.Partial _ cont -> IPartial $ FPKCont cont -- XXX can we get this?
611− K.Continue _ cont -> IPartial $ FPKCont cont
612−
613− -- Note, we can only reach FPKDone and FPKError from "initial". FPKCont
614− -- always transitions to only FPKCont. The input remains unconsumed in
615− -- this case so we use "n + 1".
616− step (FPKDone n b) _ = do
617− assertM(n == 0)
618− return $ Done (n + 1) b
619− step (FPKCont cont) a = do
595+ K.Partial _ cont -> assert False (IPartial cont)
596+ K.Continue n cont -> assert (n == 0) (IPartial cont)
597+
598+ step cont a = do
620599 r <- cont (Just a)
621600 return $ case r of
622601 K.Done n b -> Done n b
623602 K.Error e -> Error e
624− K.Partial n cont1 -> Partial n (FPKCont cont1)
625− K.Continue n cont1 -> Continue n (FPKCont cont1)
603+ K.Partial n cont1 -> Partial n cont1
604+ K.Continue n cont1 -> Continue n cont1
626605
627− -- Note, we can only reach FPKDone and FPKError from "initial".
628− extract (FPKDone n b) = return (Done n b)
629− extract (FPKCont cont) = extractParse cont
606+ extract cont = do
607+ r <- cont Nothing
608+ return $ case r of
609+ K.Done n b -> Done n b
610+ K.Error e -> Error e
611+ K.Partial _ _ -> error "Bug: extract got Partial"
612+ K.Continue n cont1 -> Continue n cont1
630613
631614#ifndef DISABLE_FUSION
632615{-# RULES "fromParserK/toParserK fusion" [2]