----------------------------------------------------------------------------- -- | -- Module : Text.ParserCombinators.Parsec.Expr -- Copyright : (c) Paolo Martini 2007 -- License : BSD-style (see the LICENSE file) -- -- Maintainer : derek.a.elkins@gmail.com -- Stability : provisional -- Portability : portable -- -- Parsec compatibility module -- ----------------------------------------------------------------------------- module Text.ParserCombinators.Parsec.Expr ( Assoc (AssocNone,AssocLeft,AssocRight), Operator(..), OperatorTable, buildExpressionParser ) where import Text.Parsec.Expr(Assoc(..)) import qualified Text.Parsec.Expr as N import Text.ParserCombinators.Parsec(GenParser) import Control.Monad.Identity data Operator tok st a = Infix (GenParser tok st (a -> a -> a)) Assoc | Prefix (GenParser tok st (a -> a)) | Postfix (GenParser tok st (a -> a)) type OperatorTable tok st a = [[Operator tok st a]] convert :: Operator tok st a -> N.Operator [tok] st Identity a convert (Infix p a) = N.Infix p a convert (Prefix p) = N.Prefix p convert (Postfix p) = N.Postfix p buildExpressionParser :: OperatorTable tok st a -> GenParser tok st a -> GenParser tok st a buildExpressionParser = N.buildExpressionParser . map (map convert)