The goal of this is to implement <++ in Haskell using StateT to act as a parser
import Control.Monad.State
type Parser = StateT String []
runParser :: Parser a -> String -> [(a,String)]
runParser = runStateT
parser :: (String -> [(a,String)]) -> Parser a
parser = StateT
(<++) :: Parser a -> Parser a -> Parser a
From this base, how could I implement <++ so that it mirrors the definition in Text.ParserCombinators.ReadP
Local, exclusive, left-biased choice: If left parser locally produces any result at all, then right parser is not used.
mplus. If the both succeed then they are no longer equivalent. How should I address this case