packages feed

egison-pattern-src-haskell-mode-0.1.0.0: test/TestImport.hs

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