blob: 44aabd0735e1eb8edd21740925b713d173a50570 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
{-# LANGUAGE GADTs, DataKinds, OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
module Events.Spec.Parse
( parse
, ParseError(..)
) where
import Events.Spec.Types
import Text.Parsec hiding (parse, ParseError)
import qualified Text.Parsec as Parsec (parse, ParseError)
import Data.Text (Text)
import qualified Data.Text as Text
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
parse :: MonadThrow m => SourceName -> Lazy.Text -> Eval m (Spec m)
parse name = either (throwM . ParseError) return <=< runParserT pSpec () name
pSpec :: ParsecT Lazy.Text () (Eval m) (Spec m)
pSpec = mzero
|