Agda-2.3.2.2: src/prototyping/mixfix/benchmarks/Incremental.hs
------------------------------------------------------------------------
-- A wrapper around incremental-parser
------------------------------------------------------------------------
{-# LANGUAGE GeneralizedNewtypeDeriving, DeriveFunctor,
MultiParamTypeClasses, FlexibleInstances #-}
module Incremental where
import Control.Applicative
import qualified Parser as Parser
import qualified Text.ParserCombinators.Incremental.Symmetric as Inc
newtype Parser k r' tok r = I { unI :: Inc.Parser [tok] r }
deriving (Functor, Applicative, Alternative)
parse :: Parser k r' tok r -> [ tok ] -> [ r ]
parse p s =
map fst $ filter (null . snd) $
Inc.completeResults $ Inc.feedEof $ Inc.feed s (unI p)
instance Parser.Parser (Parser k r' tok) k r' tok where
sym t = I $ do
ts <- Inc.token [t]
case ts of
[t] -> return t
_ -> empty