{-| Module : Data.Tree.Parser.Penn.Megaparsec.Internal Description : The internal module for tree parsers Copyright : (c) 2020 Nori Hayashi License : BSD3 Maintainer : Nori Hayashi Stability : experimental Portability : portable Language : Haskell2010 -} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE TypeFamilies #-} module Data.Tree.Parser.Penn.Megaparsec.Internal ( ParsableAsTerm(..), ) where import Text.Megaparsec {-| A type class for node label types @term@ data of which can be obtained by parsing a stream of type @str@ that is safely carved by the tree parser 'Data.Tree.Parser.Penn.Megaparsec.Char.pTree' containing no spaces and parenthese. -} class (Stream str) => ParsableAsTerm str term where {-| A parser for non-terminal node labels. Empty inputs are expected. -} pNonTerm :: (Ord err) => ParsecT err str m term {-| A parser for terminal node labels. Empty inputs are not expected. -} pTerm :: (Ord err) => ParsecT err str m term instance (Stream str, Tokens str ~ term) => ParsableAsTerm str term where pNonTerm = takeRest pTerm = takeRest