penntreebank-megaparsec-0.2.0: src/Data/Tree/Parser/Penn/Megaparsec/Internal.hs
{-|
Module : Data.Tree.Parser.Penn.Megaparsec.Internal
Description : The internal module for tree parsers
Copyright : (c) 2020 Nori Hayashi
License : BSD3
Maintainer : Nori Hayashi <net@hayashi-lin.net>
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