module Language.Lojban.Parser (
	parse,
	ParseError,
	Text,
	Clause,

	Sentence(..),
	Sumti(..),
	TermsGikTerms(..),
	SumtiTail(..),
	Selbri(..),
	RelativeClause(..),
	Linkargs(..),
	Links(..),
	MexOperator(..),
	Operand(..),
	RPExpression(..),
	RPExpressionTail(..),
	Free(..),
	JoikJek(..),
	Gek(..),
	IntervalProperty(..),
	Tag(..),
	SpaceInterval(..),
	SpaceOffset(..),

	Indicators(..),
	Term(..),
	Gik(..),
	Gihek(..),
	Statement(..),
	Ek(..),
	Quantifier(..),
	Paragraph(..),
	Paragraphs(..),
	Pre(..),
	LerfuString(..),
	RelativeClauses(..),
	Mex(..),
	JoikEk(..),
	NumberLerfuString(..),
	Guhek(..),
	JoikJekSelbri5(..),
	Joik(..),
	Number(..),
	Tense(..)
) where

import TestPappy
import Parse
import Preprocess
import Data.Maybe

parse :: String -> Either ParseError Text
parse src = case testPappytest $ testPappyParse "test" p of
	Parsed v _ _ -> Right v
	NoParse e -> Left e
	where
	p = fromMaybe (error "can't lex") $ preprocess src