-- |
-- Module      : Data.Binding.Hobbits.PatternParser
-- Copyright   : (c) 2011 Edwin Westbrook, Nicolas Frisby, and Paul Brauner
--
-- License     : BSD3
--
-- Maintainer  : emw4@rice.edu
-- Stability   : experimental
-- Portability : GHC
--
-- Using the haskell-src-meta package to parse Haskell patterns.

module Data.Binding.Hobbits.PatternParser (parsePattern) where

import Language.Haskell.TH

import qualified Language.Haskell.Exts.Parser as Meta

import qualified Language.Haskell.Meta.Parse as Meta

import qualified Language.Haskell.Meta.Parse as Sloppy
import qualified Language.Haskell.Meta.Syntax.Translate as Translate

import qualified Language.Haskell.Exts.Extension as Exts

#if MIN_VERSION_haskell_src_exts(1,14,0)
parsePatternExtensions =
  map Exts.EnableExtension $ Exts.ViewPatterns : Sloppy.myDefaultExtensions
#else
parsePatternExtensions = Exts.ViewPatterns : Sloppy.myDefaultExtensions
#endif





parsePattern :: String -> String -> Either String Pat
parsePattern fn =
  fmap Translate.toPat . Meta.parseResultToEither .
  Meta.parsePatWithMode (Sloppy.myDefaultParseMode
                    {Meta.parseFilename = fn,
                     Meta.extensions = parsePatternExtensions })