ace-0.6: src/ACE/Types/Syntax.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE BangPatterns #-}
-- | Types for the syntax tree.
module ACE.Types.Syntax where
import Data.Text (Text)
import Prelude hiding (String)
-- | Specifications consist of a sentence coordination followed by a
-- period and optionally one ore more subsequent specifications.
data Specification =
Specification !SentenceCoord !(Maybe Specification)
deriving (Show,Eq)
-- | Sentences can be coordinated by @and@ and @or@. @And@ refers to the
-- logical conjunction, while @or@ de-notes the logical disjunction. The
-- logical conjunction has a higher precedence than the disjunction.
--
-- Both connectors are right-associative. The expression
--
-- A or B and C or D
--
-- is therefore ordered like
--
-- A ∨ ((B ∧ C) ∨ D)
--
-- To enable more combinations, we have introduced comma-and and
-- comma-or. These expressions reverse the order of precedence. To
-- achieve the order
--
-- A ∨ (B ∧ (C ∨ D))
--
-- we can write
--
-- A, or B, and C or D
--
-- A sentence coordination in general consists of a sentence
-- coordination of a lower level (thus ensuring right-associativity)
-- optionally followed by the respective connector and a sentence
-- coordination of the same level.
--
data SentenceCoord =
SentenceCoord !SentenceCoord_1 !(Maybe SentenceCoord)
deriving (Show,Eq)
data SentenceCoord_1 =
SentenceCoord_1 !SentenceCoord_2 !(Maybe SentenceCoord_1)
deriving (Show,Eq)
data SentenceCoord_2 =
SentenceCoord_2 !SentenceCoord_3 !(Maybe SentenceCoord_2)
deriving (Show,Eq)
data SentenceCoord_3 =
SentenceCoord_3 !TopicalizedSentence !(Maybe SentenceCoord_3)
deriving (Show,Eq)
-- | A topicalized sentence can start with an existential topic or a
-- universal topic. It needs, however, not be topicalized at all but
-- can just be an ordinary composite sentence.
data TopicalizedSentence
= TopicalizedSentenceExistential !ExistentialTopic !(Maybe SentenceCoord) -- ^ Example: \"There is a card such that the code of the card is valid.\"
| TopicalizedSentenceUniversal !UniversalTopic !SentenceCoord -- ^ Example: \"For every code there is a card such that the code belongs to it.\"
| TopicalizedSentenceComposite !CompositeSentence -- ^ Example: \"Homer is a man.\"
deriving (Show,Eq)
data UniversalTopic =
UniversalTopic !UniversalGlobalQuantor !N'
deriving (Show,Eq)
data CompositeSentence
= CompositeSentenceCond !ConditionalSentence
| CompositeSentenceNeg !NegatedSentence
| CompositeSentence !Sentence
deriving (Show,Eq)
data ConditionalSentence =
ConditionalSentence !SentenceCoord
!SentenceCoord
deriving (Show,Eq)
data NegatedSentence =
NegatedSentence !SentenceCoord
deriving (Show,Eq)
data Sentence =
Sentence !NPCoord !VPCoord
deriving (Show,Eq)
data ExistentialTopic =
ExistentialTopic !ExistentialGlobalQuantor
!NPCoord
deriving (Show,Eq)
data NPCoord
= NPCoordDistributed !DistributiveMarker !UnmarkedNPCoord
| NPCoordUnmarked !UnmarkedNPCoord
deriving (Show,Eq)
data UnmarkedNPCoord =
UnmarkedNPCoord !NP !(Maybe UnmarkedNPCoord)
deriving (Show,Eq)
-- | Modified noun.
data N' =
N' !(Maybe AdjectiveCoord)
!N
!(Maybe ApposCoord)
!(Maybe NPCoord)
!(Maybe RelativeClauseCoord)
deriving (Show,Eq)
-- | Noun-phrase.
data NP
= NP !Specifier !N'
| NPPro !Pronoun
| NPProper !ProperName
| NPVar !Variable
deriving (Show,Eq)
-- | A noun.
data N =
N !Text
deriving (Show,Eq)
data PP =
PP !Preposition !NPCoord
deriving (Show,Eq)
data Preposition =
Preposition !Text
deriving (Show,Eq)
data ApposCoord =
ApposCoord !Apposition !(Maybe ApposCoord)
deriving (Show,Eq)
data Apposition
= AppositionVar !Variable
| AppositionQuote !Quotation
deriving (Show,Eq)
data Quotation =
Quotation !Text
deriving (Show,Eq)
data Variable =
Variable !Text
deriving (Show,Eq)
data RelativeClauseCoord =
RelativeClauseCoord !RelativeClause !(Maybe (Coord,RelativeClauseCoord))
deriving (Show,Eq)
data PossessiveNPCoord
= PossessiveNPCoordGen !GenitiveNPCoord
| PossessiveNPCoordPronoun !PossessivePronounCoord
deriving (Show,Eq)
data GenitiveNPCoord
= GenitiveNPCoord !GenitiveSpecifier !GenitiveN' !GenitiveTail
| GenitiveNPCoordName !ProperName !GenitiveTail
deriving (Show,Eq)
data ProperName =
ProperName !Text
deriving (Show,Eq)
data PossessivePronounCoord =
PossessivePronounCoord !PossessivePronoun
!(Maybe PossessivePronounCoord)
deriving (Show,Eq)
data GenitiveTail
= GenitiveTailSaxonTail !SaxonGenitiveTail
| GenitiveTailCoordtail !GenitiveCoordTail
deriving (Show,Eq)
data GenitiveCoordTail =
GenitiveCoordTail !GenitiveNPCoord
deriving (Show,Eq)
data SaxonGenitiveTail =
SaxonGenitiveTail !SaxonGenitiveMarker !(Maybe (GenitiveN',SaxonGenitiveTail))
deriving (Show,Eq)
data RelativeClause
= RelativeClauseThat !VPCoord
| RelativeClauseNP !NPCoord !VPCoord
| RelativeClauseThatNPVP !NPCoord !VPCoord
| RelativeClauseNPVP !NPCoord !NPCoord !VPCoord
| RelativeClausePP !PP !NPCoord !VPCoord
deriving (Show,Eq)
data VPCoord
= VPCoord' !VP !Coord !VPCoord
| VPCoordVP !VP
deriving (Show,Eq)
data GenitiveSpecifier
= GenitiveSpecifierD !Determiner
| GenitiveSpecifierPPC !PossessivePronounCoord
| GenitiveSpecifierN !Integer
deriving (Show,Eq)
data GenitiveN' =
GenitiveN' !(Maybe AdjectiveCoord)
!N
!(Maybe ApposCoord)
deriving (Show,Eq)
data VP
= VP !V'
| VPNeg !Copula !V'
deriving (Show,Eq)
data V' =
V' !(Maybe AdverbCoord) !ComplV ![VModifier] -- What is *?
deriving (Show,Eq)
data AdverbCoord =
AdverbCoord !Adverb !(Maybe AdverbCoord)
deriving (Show,Eq)
data ComplV
= ComplVIV !IntransitiveV
| ComplVPI !PhrasalIntransitiveV !PhrasalParticle
| ComplVTV !TransitiveV !Compl
| ComplVPV !PhrasalTransitiveV !PhrasalParticle !Compl
| ComplVPV' !PhrasalTransitiveV !Compl !PhrasalParticle
| ComplVDisV !DistransitiveV !Compl !Compl
| ComplVPDV !PhrasalDistransitiveV !Compl !PhrasalParticle !Compl
| ComplVCopula !Copula !CopulaCompl
deriving (Show,Eq)
data PhrasalTransitiveV =
PhrasalTransitiveV !Text
deriving (Show,Eq)
data PhrasalDistransitiveV =
PhrasalDistransitiveV !Text
deriving (Show,Eq)
data CopulaCompl
= CopulaComplAPC !APCoord
| CopulaComplNPC !NPCoord
| CopulaComplPP !PP
deriving (Show,Eq)
data APCoord
= APCoordAnd !APgrad !APCoord
| APCoord !APgrad
deriving (Show,Eq)
data APgrad
= APgradAPThan !AP !NPCoord
| APgradAP !AP
deriving (Show,Eq)
data AP
= APIntrans !IntransitiveAdjective
| APTrans !TransitiveAdjective !PP
deriving (Show,Eq)
data TransitiveAdjective =
TransitiveAdjective !Text
deriving (Show,Eq)
data Compl
= ComplNP !NPCoord
| ComplPP !PP
deriving (Show,Eq)
data PhrasalIntransitiveV =
PhrasalIntransitiveV !Text
deriving (Show,Eq)
data PhrasalParticle =
PhrasalParticle !Text
deriving (Show,Eq)
data IntransitiveV =
IntransitiveV !Text
deriving (Show,Eq)
data TransitiveV =
TransitiveV !Text
deriving (Show,Eq)
data DistransitiveV =
DistransitiveV !Text
deriving (Show,Eq)
data IntransitiveAdjective =
IntransitiveAdjective !Text
deriving (Show,Eq)
data VModifier
= VModifierVC !AdverbCoord
| VModifierPP !PP
| VModifierAVPP !AdverbialPP
deriving (Show,Eq)
data AdverbialPP =
AdverbialPP !Preposition !AdverbCoord
deriving (Show,Eq)
data Adverb =
Adverb !Text
deriving (Show,Eq)
data Specifier
= SpecifyDeterminer !Determiner
| SpecifyPossessive !PossessiveNPCoord
| SpecifyNumberP !NumberP
deriving (Show,Eq)
data AdjectiveCoord =
AdjectiveCoord !IntransitiveAdjective
!(Maybe AdjectiveCoord)
deriving (Show,Eq)
data NumberP =
NumberP !(Maybe GeneralizedQuantor) !Integer
deriving (Show,Eq)
data ExistentialGlobalQuantor =
ExistentialGlobalQuantor !Copula
deriving (Show,Eq)
data ExistentialGlobalQuestionQuantor =
ExistentialGlobalQuestionQuantor !Copula
deriving (Show,Eq)
data Aux
= Do -- ^ \"do\"
| Does -- ^ \"does\"
deriving (Show,Eq)
data Coord
= And -- ^ \"and\"
| Or -- ^ \"or\"
deriving (Show,Eq)
data Copula
= Is -- ^ \"is\"
| Are -- ^ \"are\"
deriving (Show,Eq)
data Determiner
= The -- ^ \"the\"
| A -- ^ \"a\"
| An -- ^ \"an\"
| Some -- ^ \"some\"
| No -- ^ \"no\"
| EveryEach -- ^ \"every\" / \"each\"
| All -- ^ \"all\"
| NotEvery -- ^ \"not every\"
| NotEach -- ^ \"not each\"
| NotAll -- ^ \"not all\"
| Which -- ^ \"which\"
deriving (Show,Eq)
data DistributiveGlobalQuantor =
ForEachOf -- ^ \"for each of\"
deriving (Show,Eq)
data DistributiveMarker =
EachOf -- ^ \"each of\"
deriving (Show,Eq)
data GeneralizedQuantor
= AtMost -- ^ \"at most\"
| AtLeast -- ^ \"at least\"
| MoreThan -- ^ \"more than\"
| LessThan -- ^ \"less than\"
| NotMoreThan -- ^ \"not more than\"
| NotLessThan -- ^ \"not less than\"
deriving (Show,Eq)
data PossessivePronoun
= His -- ^ \"his\"
| Her -- ^ \"her\"
| HisHer -- ^ \"his/her\"
| Its -- ^ \"its\"
| Their -- ^ \"their\"
| HisHerOwn -- ^ \"his own\" / \"her own\" / \"his/her own\"
| ItsOwn -- ^ \"its own\"
| TheirOwn -- ^ \"their own\"
| Whose -- ^ \"whose\"
deriving (Show,Eq)
data Pronoun
= It
| He
| She
| HeShe
| Him
| HerP
| HimHer
| They
| Them
| Itself
| Himself
| Herself
| HimselfHerself
| Themselves
| Someone
| Somebody
| Something
| NoOne
| Nobody
| NoThing
| Everyone
| Everybody
| Everything
| NotEveryone
| NotEverybody
| NotEverything
| What
| Who
| Whom
| WhichP
deriving (Show,Eq)
-- | The Saxon genitive used for possession.
data SaxonGenitiveMarker
= Apostrophe -- ^ \"'\"
| ApostropheS -- ^ \"'s\"
deriving (Show,Eq)
data UniversalGlobalQuantor
= ForEvery -- ^ \"for every\"
| ForEach -- ^ \"for each\"
| ForAll -- ^ \"for all\"
deriving (Show,Eq)