From 49c4de13e9f32a6c31c3dbb54c40e206fb50461c Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sun, 7 Aug 2016 15:56:46 +0200 Subject: switch to parsec --- events/src/Events/Spec/Parse.hs | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'events/src/Events') diff --git a/events/src/Events/Spec/Parse.hs b/events/src/Events/Spec/Parse.hs index f3114f1..44aabd0 100644 --- a/events/src/Events/Spec/Parse.hs +++ b/events/src/Events/Spec/Parse.hs @@ -1,24 +1,35 @@ {-# LANGUAGE GADTs, DataKinds, OverloadedStrings #-} +{-# LANGUAGE StandaloneDeriving #-} module Events.Spec.Parse ( parse - , Position(..), ParseError(..) + , ParseError(..) ) where -import Data.Conduit.Attoparsec -import Data.Conduit +import Events.Spec.Types -import Data.Attoparsec.Text hiding (parse) +import Text.Parsec hiding (parse, ParseError) +import qualified Text.Parsec as Parsec (parse, ParseError) import Data.Text (Text) -import qualified Data.Text as T +import qualified Data.Text as Text -import Events.Spec.Types +import Data.Text.Lazy as Lazy (Text) +import qualified Data.Text.Lazy as Lazy.Text + +import Data.Either (either) +import Data.Typeable (Typeable) + +import Control.Monad.Catch (Exception(..), MonadThrow(..)) + + +newtype ParseError = ParseError Parsec.ParseError + deriving (Typeable, Show, Eq) +instance Exception ParseError -import Control.Monad.Catch (MonadThrow) -parse :: MonadThrow m => Consumer Text m (Spec m) -parse = sinkParser $ pSpec <* endOfInput +parse :: MonadThrow m => SourceName -> Lazy.Text -> Eval m (Spec m) +parse name = either (throwM . ParseError) return <=< runParserT pSpec () name -pSpec :: Monad m => Parser (Spec m) +pSpec :: ParsecT Lazy.Text () (Eval m) (Spec m) pSpec = mzero -- cgit v1.2.3