module TestImport ( testParseExpr , testParseExprSpecialFixities , testPrintExpr -- * Re-exports , module X ) where -- re-exports import Language.Haskell.Exts.Syntax as X ( QName(..) , Name(..) , ModuleName(..) , Exp(..) ) import Language.Egison.Parser.Pattern as X ( Errors ) import Language.Egison.Syntax.Pattern as X -- main import Data.Text ( Text ) import Control.Monad.Except ( MonadError ) import qualified Language.Haskell.Exts.Parser as Haskell ( defaultParseMode ) import qualified Language.Haskell.Exts.Pretty as Haskell ( style , defaultMode ) import Language.Egison.Syntax.Pattern.Fixity ( Fixity(..) , Precedence(..) , Associativity(..) ) import qualified Language.Egison.Parser.Pattern.Mode.Haskell as HaskellParseMode ( Expr , parseExpr , parseExprWithFixities ) import Language.Egison.Pretty.Pattern ( Error ) import qualified Language.Egison.Pretty.Pattern.Mode.Haskell as HaskellPrettyMode ( Expr , prettyExprWithFixities ) testParseExpr :: MonadError (Errors String) m => String -> m HaskellParseMode.Expr testParseExpr = HaskellParseMode.parseExpr Haskell.defaultParseMode specialFixities :: [Fixity (QName ())] specialFixities = [ Fixity AssocRight (Precedence 5) (sym "++") , Fixity AssocRight (Precedence 5) (sym ":") , Fixity AssocRight (Precedence 5) (qsym ":") , Fixity AssocLeft (Precedence 7) (qname "mod") ] where sym = UnQual () . Symbol () qsym = Qual () (ModuleName () "Special") . Symbol () qname = Qual () (ModuleName () "Special") . Ident () testParseExprSpecialFixities :: MonadError (Errors String) m => String -> m HaskellParseMode.Expr testParseExprSpecialFixities = HaskellParseMode.parseExprWithFixities Haskell.defaultParseMode specialFixities testPrintExpr :: MonadError (Error (QName ())) m => HaskellPrettyMode.Expr -> m Text testPrintExpr = HaskellPrettyMode.prettyExprWithFixities Haskell.style Haskell.defaultMode specialFixities