{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}

module Language.Ltml.Parser
    ( Parser
    , MonadParser
    , ParserWrapper (wrapParser)
    )
where

import Data.Text (Text)
import Data.Void (Void)
import Text.Megaparsec
    ( MonadParsec
    , Parsec
    )

type Parser = Parsec Void Text

type MonadParser m = (MonadParsec Void Text m, MonadFail m)

class (MonadParser m) => ParserWrapper m where
    wrapParser :: Parser a -> m a

instance ParserWrapper Parser where
    wrapParser :: forall a. Parser a -> Parser a
wrapParser = Parser a -> Parser a
forall a. a -> a
id