{-# LANGUAGE ScopedTypeVariables #-}
module Language.IPA.Parser
(
parseSegment
, segmentP
, parseSyllable
, syllableP
, parseSyllables
, syllablesP
, parseSegmentXSampa
, segmentXSampaP
, parseSyllableXSampa
, parseSyllablesXSampa
, syllableXSampaP
) where
import Control.Applicative ( Alternative((<|>), some, many) )
import Data.Attoparsec.Text ( IResult(Fail, Done, Partial), Parser )
import qualified Data.Attoparsec.Text as P
import Data.Foldable ( asum, foldl' )
import Data.Functor ( ($>), (<&>) )
import Data.Text ( Text )
import Data.Text.Normalize ( NormalizationMode(NFD), normalize )
import Language.IPA.Types
parseSegment :: Text -> Either IPAException Segment
parseSegment :: Text -> Either IPAException Segment
parseSegment t :: Text
t =
(Text -> IPAException)
-> Text -> IResult Text Segment -> Either IPAException Segment
forall b.
(Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult Text -> IPAException
InvalidIPA
Text
msg
(Parser Segment -> Text -> IResult Text Segment
forall a. Parser a -> Text -> Result a
P.parse (Parser Segment
segmentP Parser Segment -> Parser Text () -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
forall t. Chunk t => Parser t ()
P.endOfInput) (NormalizationMode -> Text -> Text
normalize NormalizationMode
NFD Text
t))
where
msg :: Text
msg = "Failed to parse character(s):"
parseSyllable :: MultiSegment t => Text -> Either IPAException (Syllable t)
parseSyllable :: Text -> Either IPAException (Syllable t)
parseSyllable t :: Text
t =
(Text -> IPAException)
-> Text
-> IResult Text (Syllable t)
-> Either IPAException (Syllable t)
forall b.
(Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult Text -> IPAException
InvalidIPA
Text
msg
(Parser (Syllable t) -> Text -> IResult Text (Syllable t)
forall a. Parser a -> Text -> Result a
P.parse (Parser (Syllable t)
forall (t :: * -> *). MultiSegment t => Parser (Syllable t)
syllableP Parser (Syllable t) -> Parser Text () -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
forall t. Chunk t => Parser t ()
P.endOfInput) (NormalizationMode -> Text -> Text
normalize NormalizationMode
NFD Text
t))
where
msg :: Text
msg = "Failed to parse segment(s):"
parseSyllables :: (MultiSegment t, Monoid (t (Syllable t)))
=> Text
-> Either IPAException (t (Syllable t))
parseSyllables :: Text -> Either IPAException (t (Syllable t))
parseSyllables t :: Text
t =
(Text -> IPAException)
-> Text
-> IResult Text (t (Syllable t))
-> Either IPAException (t (Syllable t))
forall b.
(Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult Text -> IPAException
InvalidIPA
Text
msg
(Parser (t (Syllable t)) -> Text -> IResult Text (t (Syllable t))
forall a. Parser a -> Text -> Result a
P.parse (Parser (t (Syllable t))
forall (t :: * -> *).
(MultiSegment t, Monoid (t (Syllable t))) =>
Parser (t (Syllable t))
syllablesP Parser (t (Syllable t))
-> Parser Text () -> Parser (t (Syllable t))
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
forall t. Chunk t => Parser t ()
P.endOfInput) (NormalizationMode -> Text -> Text
normalize NormalizationMode
NFD Text
t))
where
msg :: Text
msg = "Failed to parse syllable:"
syllableP :: MultiSegment t => Parser (Syllable t)
syllableP :: Parser (Syllable t)
syllableP = Parser (Syllable t)
withStressP Parser (Syllable t) -> Parser (Syllable t) -> Parser (Syllable t)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (Syllable t)
withFeaturesP Parser (Syllable t) -> Parser (Syllable t) -> Parser (Syllable t)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> t Segment -> Syllable t
forall (t :: * -> *). t Segment -> Syllable t
Syllable (t Segment -> Syllable t)
-> Parser Text (t Segment) -> Parser (Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text (t Segment)
justSegments
where
justSegments :: Parser Text (t Segment)
justSegments = Parser Segment -> Parser Text (t Segment)
forall (t :: * -> *) a (f :: * -> *).
(Applicative t, Monoid (t a), Alternative f) =>
f a -> f (t a)
someT Parser Segment
segmentP
withFeaturesP :: Parser (Syllable t)
withFeaturesP = (SuprasegmentalFeature -> Syllable t -> Syllable t)
-> Syllable t -> [SuprasegmentalFeature] -> Syllable t
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature
(Syllable t -> [SuprasegmentalFeature] -> Syllable t)
-> Parser (Syllable t)
-> Parser Text ([SuprasegmentalFeature] -> Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (t Segment -> Syllable t
forall (t :: * -> *). t Segment -> Syllable t
Syllable (t Segment -> Syllable t)
-> Parser Text (t Segment) -> Parser (Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text (t Segment)
justSegments)
Parser Text ([SuprasegmentalFeature] -> Syllable t)
-> Parser Text [SuprasegmentalFeature] -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text SuprasegmentalFeature
-> Parser Text [SuprasegmentalFeature]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some Parser Text SuprasegmentalFeature
suprasegmentalFeatureP
withStressP :: Parser (Syllable t)
withStressP = (SuprasegmentalFeature -> Syllable t -> Syllable t)
-> Syllable t -> [SuprasegmentalFeature] -> Syllable t
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature (Syllable t -> [SuprasegmentalFeature] -> Syllable t)
-> Parser (Syllable t)
-> Parser Text ([SuprasegmentalFeature] -> Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Syllable t)
withStress
Parser Text ([SuprasegmentalFeature] -> Syllable t)
-> Parser Text [SuprasegmentalFeature] -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text SuprasegmentalFeature
-> Parser Text [SuprasegmentalFeature]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Text SuprasegmentalFeature
suprasegmentalFeatureP
where
withStress :: Parser (Syllable t)
withStress = SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature (SuprasegmentalFeature -> Syllable t -> Syllable t)
-> Parser Text SuprasegmentalFeature
-> Parser Text (Syllable t -> Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text SuprasegmentalFeature
stressP
Parser Text (Syllable t -> Syllable t)
-> Parser (Syllable t) -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (t Segment -> Syllable t
forall (t :: * -> *). t Segment -> Syllable t
Syllable (t Segment -> Syllable t)
-> Parser Text (t Segment) -> Parser (Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text (t Segment)
justSegments)
segmentP :: Parser Segment
segmentP :: Parser Segment
segmentP = Parser Segment
withFeatureP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
pureSegmentP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
optionalP
where
pureSegmentP :: Parser Segment
pureSegmentP = Parser Segment
vowelP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Consonant -> Segment
Consonant (Consonant -> Segment) -> Parser Text Consonant -> Parser Segment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Consonant
consonantP
withFeatureP :: Parser Segment
withFeatureP =
(SegmentalFeature -> Segment -> Segment)
-> Segment -> [SegmentalFeature] -> Segment
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Segment -> [SegmentalFeature] -> Segment)
-> Parser Segment -> Parser Text ([SegmentalFeature] -> Segment)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Segment
pureSegmentP Parser Text ([SegmentalFeature] -> Segment)
-> Parser Text [SegmentalFeature] -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text SegmentalFeature -> Parser Text [SegmentalFeature]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some Parser Text SegmentalFeature
segmentalFeatureP
optionalP :: Parser Segment
optionalP = Segment -> Segment
Optional
(Segment -> Segment) -> Parser Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ("(" Parser Text Text -> Parser Segment -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Parser Segment
withFeatureP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
pureSegmentP) Parser Segment -> Parser Text Text -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ")")
syllablesP :: (MultiSegment t, Monoid (t (Syllable t)))
=> Parser (t (Syllable t))
syllablesP :: Parser (t (Syllable t))
syllablesP = Parser Text (Syllable t) -> Parser (t (Syllable t))
forall (t :: * -> *) a (f :: * -> *).
(Applicative t, Monoid (t a), Alternative f) =>
f a -> f (t a)
someT Parser Text (Syllable t)
withWS
where
withWS :: Parser Text (Syllable t)
withWS = Parser Text (Syllable t)
forall (t :: * -> *). MultiSegment t => Parser (Syllable t)
syllableP Parser Text (Syllable t)
-> Parser Text [Char] -> Parser Text (Syllable t)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char -> Parser Text [Char]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Text Char
P.space
consonantP :: Parser Consonant
consonantP :: Parser Text Consonant
consonantP =
Parser Text Consonant
clickP Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
implosiveP Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
ejectiveP Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
doublyArticulatedP Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
pulmonicP
vowelP :: Parser Segment
vowelP :: Parser Segment
vowelP = Parser Segment
triphthongP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
diphthongP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Vowel -> Segment
Vowel (Vowel -> Segment) -> Parser Text Vowel -> Parser Segment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Vowel
pureP
where
diphthongP :: Parser Segment
diphthongP = Vowel -> Vowel -> Segment
Diphthong (Vowel -> Vowel -> Segment)
-> Parser Text Vowel -> Parser Text (Vowel -> Segment)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Vowel
pureP Parser Text (Vowel -> Segment)
-> Parser Text Vowel -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text Vowel
pureP
triphthongP :: Parser Segment
triphthongP = Vowel -> Vowel -> Vowel -> Segment
Triphthong (Vowel -> Vowel -> Vowel -> Segment)
-> Parser Text Vowel -> Parser Text (Vowel -> Vowel -> Segment)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Vowel
pureP Parser Text (Vowel -> Vowel -> Segment)
-> Parser Text Vowel -> Parser Text (Vowel -> Segment)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text Vowel
pureP Parser Text (Vowel -> Segment)
-> Parser Text Vowel -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text Vowel
pureP
pv :: Height -> Backness -> Roundedness -> Vowel
pv = Height -> Backness -> Roundedness -> Vowel
Pure
lowered :: Parser Text Char
lowered = Char -> Parser Text Char
diacriticP '\x031e'
pureP :: Parser Text Vowel
pureP =
[Parser Text Vowel] -> Parser Text Vowel
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "e" Parser Text Text -> Parser Text Char -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Front Roundedness
Unrounded
, "ø" Parser Text Text -> Parser Text Char -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Front Roundedness
Rounded
, "ɤ" Parser Text Text -> Parser Text Char -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Back Roundedness
Unrounded
, "o" Parser Text Text -> Parser Text Char -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Back Roundedness
Rounded
, "i" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Front Roundedness
Unrounded
, "y" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Front Roundedness
Rounded
, "ɨ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Central Roundedness
Unrounded
, "ʉ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Central Roundedness
Rounded
, "ɯ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Back Roundedness
Unrounded
, "u" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Back Roundedness
Rounded
, "ɪ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearClose Backness
Front Roundedness
Unrounded
, "ʏ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearClose Backness
Front Roundedness
Rounded
, "ʊ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearClose Backness
Back Roundedness
Rounded
, "e" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Front Roundedness
Unrounded
, "ø" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Front Roundedness
Rounded
, "ɘ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Central Roundedness
Unrounded
, "ɵ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Central Roundedness
Rounded
, "ɤ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Back Roundedness
Unrounded
, "o" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Back Roundedness
Rounded
, "ə" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Central Roundedness
Unrounded
, "ɛ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Front Roundedness
Unrounded
, "œ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Front Roundedness
Rounded
, "ɜ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Central Roundedness
Unrounded
, "ɞ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Central Roundedness
Rounded
, "ʌ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Back Roundedness
Unrounded
, "ɔ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Back Roundedness
Rounded
, "æ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearOpen Backness
Front Roundedness
Unrounded
, "ɐ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearOpen Backness
Central Roundedness
Unrounded
, "a" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Front Roundedness
Unrounded
, "ɶ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Front Roundedness
Rounded
, "ä" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Central Roundedness
Unrounded
, "ɑ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Back Roundedness
Unrounded
, "ɒ" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Back Roundedness
Rounded
]
pulmonicP :: Parser Consonant
pulmonicP :: Parser Text Consonant
pulmonicP =
[Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ Parser Text Consonant
biliabialP
, Parser Text Consonant
labioDentalP
, Parser Text Consonant
dentalP
, Parser Text Consonant
postAlveolarP
, Parser Text Consonant
retroflexP
, Parser Text Consonant
palatalP
, Parser Text Consonant
velarP
, Parser Text Consonant
uvularP
, Parser Text Consonant
pharyngealP
, Parser Text Consonant
glottalP
, Parser Text Consonant
alveolarP
]
where
biliabialP :: Parser Text Consonant
biliabialP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
bc :: Phonation -> Manner -> Consonant
bc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Bilabial
cs :: [Parser Text Consonant]
cs =
[ "m" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "p" "ɸ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "b" "β"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "β" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ɸ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʙ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced Manner
Trill
, "b" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced Manner
Plosive
, "p" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiceless Manner
Plosive
]
labioDentalP :: Parser Text Consonant
labioDentalP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
ldc :: Phonation -> Manner -> Consonant
ldc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
LabioDental
cs :: [Parser Text Consonant]
cs = [ "ɱ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiced Manner
Nasal
, "f" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "v" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʋ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiced Manner
Approximant
, "ⱱ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiced Manner
Flap
]
dentalP :: Parser Text Consonant
dentalP = "θ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
dc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "ð" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
dc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
where
dc :: Phonation -> Manner -> Consonant
dc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Dental
alveolarP :: Parser Text Consonant
alveolarP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
ac :: Phonation -> Manner -> Consonant
ac v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Alveolar
cs :: [Parser Text Consonant]
cs =
[ "n" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "t" "s" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "d" "z" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, "s" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "z" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "ɹ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Approximant
, "ɾ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Flap
, "r" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Trill
, "ɬ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless Manner
LateralFricative
, "ɮ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
LateralFricative
, "l" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
LateralApproximant
, "ɺ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
LateralFlap
, "tɬ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless Manner
LateralAffricate
, "dɮ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
LateralAffricate
, "t" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless Manner
Plosive
, "d" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Plosive
]
postAlveolarP :: Parser Text Consonant
postAlveolarP = Text -> Text -> Parser Text Text
doubleArticulated "t" "ʃ"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Text -> Parser Text Text
doubleArticulated "d" "ʒ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "ʃ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "ʒ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
where
pc :: Phonation -> Manner -> Consonant
pc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
PostAlveolar
retroflexP :: Parser Text Consonant
retroflexP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
rc :: Phonation -> Manner -> Consonant
rc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Retroflex
cs :: [Parser Text Consonant]
cs =
[ "ɳ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "ʈ" "ʂ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "ɖ" "ʐ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, "ʂ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "ʐ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "ɻ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Approximant
, "ɽ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Flap
, "ɽr" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Trill
, "ɭ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
LateralApproximant
, "ʈ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiceless Manner
Plosive
, "ɖ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Plosive
]
palatalP :: Parser Text Consonant
palatalP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
pc :: Phonation -> Manner -> Consonant
pc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Palatal
cs :: [Parser Text Consonant]
cs =
[ "ɲ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "t" "ɕ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "d" "ʑ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "c" "ç"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "ɟ" "ʝ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "ɕ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "ʑ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "ç" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʝ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "j" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Approximant
, "ʎ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
LateralApproximant
, "c" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless Manner
Plosive
, "ɟ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Plosive
]
velarP :: Parser Text Consonant
velarP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
vc :: Phonation -> Manner -> Consonant
vc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Velar
cs :: [Parser Text Consonant]
cs =
[ "ŋ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "k" "x"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "g" "ɣ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "x" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ɣ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ɰ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
Approximant
, "ʟ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
LateralApproximant
, "k" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiceless Manner
Plosive
, "g" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
Plosive
]
uvularP :: Parser Text Consonant
uvularP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
uc :: Phonation -> Manner -> Consonant
uc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Uvular
cs :: [Parser Text Consonant]
cs =
[ "ɴ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "q" "χ"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "ɢ" "ʁ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "χ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʁ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʀ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced Manner
Trill
, "q" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiceless Manner
Plosive
, "ɢ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced Manner
Plosive
]
pharyngealP :: Parser Text Consonant
pharyngealP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
pc :: Phonation -> Manner -> Consonant
pc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Pharyngeal
cs :: [Parser Text Consonant]
cs =
[ Text -> Text -> Parser Text Text
doubleArticulated "ʡ" "ʢ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "ħ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʕ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʡ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Flap
, "ʜ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Trill
, "ʢ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless Manner
Trill
, "ʡ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless Manner
Plosive
]
glottalP :: Parser Text Consonant
glottalP = Text -> Text -> Parser Text Text
doubleArticulated "ʔ" "h"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "ʔ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiceless Manner
Plosive
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "h" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "ɦ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
where
gc :: Phonation -> Manner -> Consonant
gc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Glottal
ejectiveP :: Parser Consonant
ejectiveP :: Parser Text Consonant
ejectiveP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs Parser Text Consonant -> Parser Text Char -> Parser Text Consonant
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char
ejective
where
ejective :: Parser Text Char
ejective = Char -> Parser Text Char
diacriticP '\x02bc'
ej :: Place -> Manner -> Consonant
ej = Place -> Manner -> Consonant
Ejective
cs :: [Parser Text Consonant]
cs =
[ Text -> Text -> Parser Text Text
doubleArticulated "t" "ɬ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar Manner
LateralAffricate
, Text -> Text -> Parser Text Text
doubleArticulated "q" "χ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Uvular (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "t" "s" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "t" "ʃ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
PostAlveolar (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "ʈ" "ʂ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Retroflex (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "t" "ɕ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Palatal (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulated "k" "x" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Velar (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "p" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Bilabial Manner
Plosive
, "ɸ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Bilabial (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "f" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
LabioDental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "θ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Dental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ɬ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar Manner
LateralFricative
, "t" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar Manner
Plosive
, "s" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "ʃ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
PostAlveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "ʈ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Retroflex Manner
Plosive
, "ʂ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Retroflex (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "c" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Palatal Manner
Plosive
, "ɕ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Palatal (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "k" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Velar Manner
Plosive
, "x" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Velar (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "q" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Uvular Manner
Plosive
, "χ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Uvular (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ʡ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Pharyngeal Manner
Plosive
]
implosiveP :: Parser Consonant
implosiveP :: Parser Text Consonant
implosiveP = Phonation -> Place -> Consonant
Implosive Phonation
Voiceless (Place -> Consonant) -> Parser Text Place -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text Place] -> Parser Text Place
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Place]
cs Parser Text Consonant -> Parser Text Char -> Parser Text Consonant
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char
voiceless
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Phonation -> Place -> Consonant
Implosive Phonation
Voiced (Place -> Consonant) -> Parser Text Place -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text Place] -> Parser Text Place
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Place]
cs
where
voiceless :: Parser Text Char
voiceless = Char -> Parser Text Char
diacriticP '\x030a'
cs :: [Parser Text Place]
cs = [ "ɓ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Bilabial
, "ɗ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Alveolar
, "ᶑ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Retroflex
, "ʄ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Palatal
, "ɠ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Velar
, "ʛ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Uvular
]
clickP :: Parser Consonant
clickP :: Parser Text Consonant
clickP = Place -> Consonant
Click
(Place -> Consonant) -> Parser Text Place -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text Place] -> Parser Text Place
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "ʘ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Bilabial
, "ǀ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Dental
, "ǃ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Alveolar
, "ǁ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
PostAlveolar
, "ǂ" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Palatal
]
doublyArticulatedP :: Parser Consonant
doublyArticulatedP :: Parser Text Consonant
doublyArticulatedP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
da :: Phonation -> Place -> Place -> Manner -> Consonant
da = Phonation -> Place -> Place -> Manner -> Consonant
DoublyArticulated
cs :: [Parser Text Consonant]
cs =
[ Text -> Text -> Parser Text Text
doubleArticulated "n" "m" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Alveolar Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "t" "p" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Alveolar Manner
Plosive
, Text -> Text -> Parser Text Text
doubleArticulated "d" "b" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Alveolar Manner
Plosive
, Text -> Text -> Parser Text Text
doubleArticulated "ŋ" "m" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Velar Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulated "k" "p" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Velar Manner
Plosive
, Text -> Text -> Parser Text Text
doubleArticulated "g" "b" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Velar Manner
Plosive
, Text -> Text -> Parser Text Text
doubleArticulated "q" "ʡ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Uvular Place
Pharyngeal Manner
Plosive
, "ɥ" Parser Text Text -> Parser Text Char -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> Parser Text Char
P.char '\x030a'
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Palatal (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "ɥ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Palatal Manner
Approximant
, "ʍ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Velar (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "w" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Velar Manner
Approximant
, "ɫ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Alveolar Place
Velar Manner
LateralApproximant
, "ɧ" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
PostAlveolar Place
Velar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
]
segmentalFeatureP :: Parser SegmentalFeature
segmentalFeatureP :: Parser Text SegmentalFeature
segmentalFeatureP = Parser Text SegmentalFeature
secondaryArticulationP Parser Text SegmentalFeature
-> Parser Text SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Parser Text SegmentalFeature] -> Parser Text SegmentalFeature
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text SegmentalFeature]
fs
where
fs :: [Parser Text SegmentalFeature]
fs = [ "\x030a" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> SegmentalFeature
Voicing Phonation
Voiceless
, "\x030c" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> SegmentalFeature
Voicing Phonation
Voiced
, "\x2d0\x2d0" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
OverLong
, "\x2d1" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
HalfLong
, "\x2d0" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
Long
, "\x0306" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
ExtraShort
, "\x036a" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Aspirated
, "\x0339" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
MoreRounded
, "\x031c" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
LessRounded
, "\x031f" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Advanced
, "\x0320" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Retracted
, "\x0308" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Centralized
, "\x033d" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
MidCentralized
, "\x1d5d" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Compressed
, "\x0329" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Syllabic
, "\x032f" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
NonSyllabic
, "\x02de" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Rhotacized
, "\x0324" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
BreathyVoice
, "\x0330" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
CreakyVoice
, "\x033c" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
LinguoLabialized
, "\x02b7" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Labialized
, "\x02b2" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Palatalized
, "\x02e0" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Velarized
, "\x02e4" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Pharyngealized
, "\x031d" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Raised
, "\x031e" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Lowered
, "\x0318" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
AdvancedTongueRoot
, "\x0319" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
RetractedTongueRoot
, "\x032a" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Dentalized
, "\x033a" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Apical
, "\x033b" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Laminal
, "\x0303" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Nasalized
, "\x207f" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
NasalRelease
, "\x02e1" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
LateralRelease
, "\x031a" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
NoAudibleRelease
]
secondaryArticulationP :: Parser SegmentalFeature
secondaryArticulationP :: Parser Text SegmentalFeature
secondaryArticulationP = Segment -> SegmentalFeature
SecondaryArticulation (Segment -> SegmentalFeature)
-> Parser Segment -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Segment
secondaryP
where
secondaryP :: Parser Segment
secondaryP = [Parser Segment] -> Parser Segment
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Segment]
segments
pc :: Phonation -> Place -> Manner -> Segment
pc = Phonation -> Place -> Manner -> Segment
PulmonicConsonant
pv :: Height -> Backness -> Roundedness -> Segment
pv = Height -> Backness -> Roundedness -> Segment
PureVowel
segments :: [Parser Segment]
segments =
[ "\x1d50" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Bilabial Manner
Nasal
, "\x1dac" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
LabioDental Manner
Nasal
, "\x207f" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Alveolar Manner
Nasal
, "\x1daf" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Retroflex Manner
Nasal
, "\x1dae" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Palatal Manner
Nasal
, "\x1d51" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Velar Manner
Nasal
, "\x1db0" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Uvular Manner
Nasal
, "\x1d56" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Bilabial Manner
Plosive
, "\x1d47" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Bilabial Manner
Plosive
, "\x1d57" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Alveolar Manner
Plosive
, "\x1d48" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Alveolar Manner
Plosive
, "\x1d9c" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Palatal Manner
Plosive
, "\x1da1" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Palatal Manner
Plosive
, "\x1d4f" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Velar Manner
Plosive
, "\x1da2" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Velar Manner
Plosive
, "\x02c0" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Glottal Manner
Plosive
, "\x1db2" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Bilabial (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1d5d" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Bilabial (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1da0" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
LabioDental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1d5b" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
LabioDental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1dbf" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Dental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1d9e" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Dental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x02e2" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Alveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "\x1dbb" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Alveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "\x1db4" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
PostAlveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "\x1dbe" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
PostAlveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "\x1d9d" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Palatal (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "\x1dbd" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Palatal (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "\x1d9c\x0327" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Palatal (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1da8" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Palatal (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x02e3" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Velar (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x02e0" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Velar (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1d61" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Uvular (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x02b6" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Uvular (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x02b0" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Glottal (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x02b1" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Glottal (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "\x1db9" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
LabioDental Manner
Approximant
, "\x02b4" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Alveolar Manner
Approximant
, "\x02b5" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Retroflex Manner
Approximant
, "\x02b2" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Palatal Manner
Approximant
, "\xab69" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiceless Place
Velar Manner
Approximant
, "\x1dad" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Velar Manner
Approximant
, "\x02b3" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Manner -> Segment
pc Phonation
Voiced Place
Alveolar Manner
Trill
, "\x1df1"
Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Segment
DoublyArticulatedConsonant Phonation
Voiced Place
Bilabial Place
Velar Manner
Approximant
, "\x2071" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Close Backness
Front Roundedness
Unrounded
, "\x02b8" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Close Backness
Front Roundedness
Rounded
, "\x1da4" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Close Backness
Central Roundedness
Unrounded
, "\x1db6" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Close Backness
Central Roundedness
Rounded
, "\x1d5a" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Close Backness
Back Roundedness
Unrounded
, "\x1d58" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Close Backness
Back Roundedness
Rounded
, "\x1da6" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
NearClose Backness
Front Roundedness
Unrounded
, "\x1da7" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
NearClose Backness
Central Roundedness
Unrounded
, "\x1db7" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
NearClose Backness
Back Roundedness
Rounded
, "\x1d4a" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Mid Backness
Central Roundedness
Unrounded
, "\x1d4a" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Mid Backness
Central Roundedness
Rounded
, "\x1d4b" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
OpenMid Backness
Front Roundedness
Unrounded
, "\xa7f9" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
OpenMid Backness
Front Roundedness
Rounded
, "\x1d9f" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
OpenMid Backness
Central Roundedness
Unrounded
, "\x1dba" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
OpenMid Backness
Back Roundedness
Unrounded
, "\x1d53" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
OpenMid Backness
Back Roundedness
Rounded
, "\x1d46" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
NearOpen Backness
Front Roundedness
Unrounded
, "\x1d44" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
NearOpen Backness
Central Roundedness
Unrounded
, "\x1d45" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
NearOpen Backness
Back Roundedness
Unrounded
, "\x1d9b" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
NearOpen Backness
Back Roundedness
Rounded
, "\x1d43" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Open Backness
Front Roundedness
Unrounded
, "\x1d44" Parser Text Text -> Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Segment
pv Height
Open Backness
Back Roundedness
Rounded
]
diacriticP :: Char -> Parser Char
diacriticP :: Char -> Parser Text Char
diacriticP = Char -> Parser Text Char
P.char
doubleArticulated :: Text -> Text -> Parser Text
doubleArticulated :: Text -> Text -> Parser Text Text
doubleArticulated x :: Text
x y :: Text
y = Text -> Parser Text Text
P.string (Text -> Parser Text Text) -> Text -> Parser Text Text
forall a b. (a -> b) -> a -> b
$ Text
x Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
invertedBreve Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
y
where
invertedBreve :: Text
invertedBreve = "\x0361"
suprasegmentalFeatureP :: Parser SuprasegmentalFeature
suprasegmentalFeatureP :: Parser Text SuprasegmentalFeature
suprasegmentalFeatureP = [Parser Text SuprasegmentalFeature]
-> Parser Text SuprasegmentalFeature
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text SuprasegmentalFeature]
fs
where
fs :: [Parser Text SuprasegmentalFeature]
fs = [ Parser Text SuprasegmentalFeature
toneContourP
, Parser Text SuprasegmentalFeature
toneContourDiacriticP
, Parser Text SuprasegmentalFeature
levelToneP
, Parser Text SuprasegmentalFeature
levelToneDiacriticP
, [Parser Int] -> Parser Text SuprasegmentalFeature
forall (t :: * -> *).
Foldable t =>
t (Parser Int) -> Parser Text SuprasegmentalFeature
toneNumberP [Parser Int]
digits
, "." Parser Text Text
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SuprasegmentalFeature
Break
, "\x203f" Parser Text Text
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SuprasegmentalFeature
Linking
]
levelToneP :: Parser Text SuprasegmentalFeature
levelToneP = LevelTone -> SuprasegmentalFeature
LevelLexicalTone
(LevelTone -> SuprasegmentalFeature)
-> Parser Text LevelTone -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text LevelTone] -> Parser Text LevelTone
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "\x02e5" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
ExtraHighTone
, "\x02e6" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
HighTone
, "\x02e7" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
MidTone
, "\x02e8" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
LowTone
, "\x02e9" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
ExtraLowTone
]
levelToneDiacriticP :: Parser Text SuprasegmentalFeature
levelToneDiacriticP = LevelTone -> SuprasegmentalFeature
LevelLexicalToneDiacritic
(LevelTone -> SuprasegmentalFeature)
-> Parser Text LevelTone -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text LevelTone] -> Parser Text LevelTone
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "\x030b" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
ExtraHighTone
, "\x0341" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
HighTone
, "\x0304" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
MidTone
, "\x0340" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
LowTone
, "\x030f" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
ExtraLowTone
, "\xa71c" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
DownStep
, "\xa71b" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
UpStep
]
toneContourP :: Parser Text SuprasegmentalFeature
toneContourP = ToneContour -> SuprasegmentalFeature
LexicalToneContour
(ToneContour -> SuprasegmentalFeature)
-> Parser Text ToneContour -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text ToneContour] -> Parser Text ToneContour
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "\x02e9\x02e5" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
Rising
, "\x02e5\x02e9" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
Falling
, "\x02e7\x02e5" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
HighRising
, "\x02e9\x02e7" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
LowRising
, "\x02e5\x02e7" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
HighFalling
, "\x02e7\x02e9" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
LowFalling
, "\x02e7\x02e6\x02e8" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
RisingFalling
, "\x02e7\x02e8\x02e6" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
FallingRising
, "\x2197" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
GlobalRise
, "\x2199" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
GlobalFall
]
toneContourDiacriticP :: Parser Text SuprasegmentalFeature
toneContourDiacriticP = ToneContour -> SuprasegmentalFeature
LexicalToneContourDiacritic
(ToneContour -> SuprasegmentalFeature)
-> Parser Text ToneContour -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text ToneContour] -> Parser Text ToneContour
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "\x0302" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
Rising
, "\x030c" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
Falling
, "\x1dc9" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
HighRising
, "\x1dc5" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
LowRising
, "\x1dc7" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
HighFalling
, "\x1dc6" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
LowFalling
, "\x1dc8" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
RisingFalling
, "\x1dc9" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
FallingRising
]
digits :: [Parser Int]
digits = [ "\x2070" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 0
, "\x00b9" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 1
, "\x00b2" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 2
, "\x00b3" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 3
, "\x2074" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 4
, "\x2075" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 5
, "\x2076" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 6
, "\x2077" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 7
, "\x2078" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 8
, "\x2079" Parser Text Text -> Int -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> 9
]
stressP :: Parser SuprasegmentalFeature
stressP :: Parser Text SuprasegmentalFeature
stressP = "\x02c8" Parser Text Text
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Stress -> SuprasegmentalFeature
Stress Stress
Primary Parser Text SuprasegmentalFeature
-> Parser Text SuprasegmentalFeature
-> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "\x02cc" Parser Text Text
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Stress -> SuprasegmentalFeature
Stress Stress
Secondary
toneNumberP :: (Foldable t) => t (Parser Int) -> Parser SuprasegmentalFeature
toneNumberP :: t (Parser Int) -> Parser Text SuprasegmentalFeature
toneNumberP digits :: t (Parser Int)
digits = Int -> SuprasegmentalFeature
ToneNumber
(Int -> SuprasegmentalFeature)
-> Parser Int -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser Int -> Parser Text [Int]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some (t (Parser Int) -> Parser Int
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum t (Parser Int)
digits) Parser Text [Int] -> ([Int] -> Int) -> Parser Int
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> (Int -> Int -> Int) -> Int -> [Int] -> Int
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\a :: Int
a b :: Int
b -> Int
b Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
a Int -> Int -> Int
forall a. Num a => a -> a -> a
* 10) 0)
consT :: (Applicative t, Monoid (t a)) => a -> t a -> t a
consT :: a -> t a -> t a
consT x :: a
x xs :: t a
xs = a -> t a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x t a -> t a -> t a
forall a. Semigroup a => a -> a -> a
<> t a
xs
manyT :: (Applicative t, Monoid (t a), Alternative f) => f a -> f (t a)
manyT :: f a -> f (t a)
manyT v :: f a
v = f (t a)
manyT'
where
manyT' :: f (t a)
manyT' = f (t a)
someT' f (t a) -> f (t a) -> f (t a)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> t a -> f (t a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure t a
forall a. Monoid a => a
mempty
someT' :: f (t a)
someT' = a -> t a -> t a
forall (t :: * -> *) a.
(Applicative t, Monoid (t a)) =>
a -> t a -> t a
consT (a -> t a -> t a) -> f a -> f (t a -> t a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a
v f (t a -> t a) -> f (t a) -> f (t a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f (t a)
manyT'
someT :: (Applicative t, Monoid (t a), Alternative f) => f a -> f (t a)
someT :: f a -> f (t a)
someT v :: f a
v = a -> t a -> t a
forall (t :: * -> *) a.
(Applicative t, Monoid (t a)) =>
a -> t a -> t a
consT (a -> t a -> t a) -> f a -> f (t a -> t a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a
v f (t a -> t a) -> f (t a) -> f (t a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f a -> f (t a)
forall (t :: * -> *) a (f :: * -> *).
(Applicative t, Monoid (t a), Alternative f) =>
f a -> f (t a)
manyT f a
v
handleResult :: (Text -> IPAException)
-> Text
-> IResult Text b
-> Either IPAException b
handleResult :: (Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult ty :: Text -> IPAException
ty t :: Text
t i :: IResult Text b
i = case IResult Text b
i of
Done _ r :: b
r -> b -> Either IPAException b
forall a b. b -> Either a b
Right b
r
Fail ch :: Text
ch _ _ -> IPAException -> Either IPAException b
forall a b. a -> Either a b
Left (IPAException -> Either IPAException b)
-> (Text -> IPAException) -> Text -> Either IPAException b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> IPAException
ty (Text -> Either IPAException b) -> Text -> Either IPAException b
forall a b. (a -> b) -> a -> b
$ [Text] -> Text
forall a. Monoid a => [a] -> a
mconcat [ Text
t, " ", "'", Text
ch, "'" ]
Partial p :: Text -> IResult Text b
p -> (Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
forall b.
(Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult Text -> IPAException
ty Text
t (Text -> IResult Text b
p Text
forall a. Monoid a => a
mempty)
parseSegmentXSampa :: Text -> Either IPAException Segment
parseSegmentXSampa :: Text -> Either IPAException Segment
parseSegmentXSampa t :: Text
t =
(Text -> IPAException)
-> Text -> IResult Text Segment -> Either IPAException Segment
forall b.
(Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult Text -> IPAException
InvalidXSampa
Text
msg
(Parser Segment -> Text -> IResult Text Segment
forall a. Parser a -> Text -> Result a
P.parse (Parser Segment
segmentXSampaP Parser Segment -> Parser Text () -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
forall t. Chunk t => Parser t ()
P.endOfInput) Text
t)
where
msg :: Text
msg = "Failed to parse character(s):"
parseSyllableXSampa
:: MultiSegment t => Text -> Either IPAException (Syllable t)
parseSyllableXSampa :: Text -> Either IPAException (Syllable t)
parseSyllableXSampa t :: Text
t =
(Text -> IPAException)
-> Text
-> IResult Text (Syllable t)
-> Either IPAException (Syllable t)
forall b.
(Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult Text -> IPAException
InvalidXSampa
Text
msg
(Parser (Syllable t) -> Text -> IResult Text (Syllable t)
forall a. Parser a -> Text -> Result a
P.parse (Parser (Syllable t)
forall (t :: * -> *). MultiSegment t => Parser (Syllable t)
syllableXSampaP Parser (Syllable t) -> Parser Text () -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
forall t. Chunk t => Parser t ()
P.endOfInput) Text
t)
where
msg :: Text
msg = "Failed to parse segment(s):"
parseSyllablesXSampa :: (MultiSegment t, Monoid (t (Syllable t)))
=> Text
-> Either IPAException (t (Syllable t))
parseSyllablesXSampa :: Text -> Either IPAException (t (Syllable t))
parseSyllablesXSampa t :: Text
t =
(Text -> IPAException)
-> Text
-> IResult Text (t (Syllable t))
-> Either IPAException (t (Syllable t))
forall b.
(Text -> IPAException)
-> Text -> IResult Text b -> Either IPAException b
handleResult Text -> IPAException
InvalidXSampa
Text
msg
(Parser (t (Syllable t)) -> Text -> IResult Text (t (Syllable t))
forall a. Parser a -> Text -> Result a
P.parse (Parser (t (Syllable t))
forall (t :: * -> *).
(MultiSegment t, Monoid (t (Syllable t))) =>
Parser (t (Syllable t))
syllablesXSampaP Parser (t (Syllable t))
-> Parser Text () -> Parser (t (Syllable t))
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
forall t. Chunk t => Parser t ()
P.endOfInput) Text
t)
where
msg :: Text
msg = "Failed to parse syllable:"
segmentXSampaP :: Parser Segment
segmentXSampaP :: Parser Segment
segmentXSampaP = Parser Segment
withFeatureP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
pureSegmentP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
optionalP
where
pureSegmentP :: Parser Segment
pureSegmentP = Parser Segment
vowelXSampaP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Consonant -> Segment
Consonant (Consonant -> Segment) -> Parser Text Consonant -> Parser Segment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Consonant
consonantXSampaP
withFeatureP :: Parser Segment
withFeatureP = (SegmentalFeature -> Segment -> Segment)
-> Segment -> [SegmentalFeature] -> Segment
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Segment -> [SegmentalFeature] -> Segment)
-> Parser Segment -> Parser Text ([SegmentalFeature] -> Segment)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Segment
pureSegmentP
Parser Text ([SegmentalFeature] -> Segment)
-> Parser Text [SegmentalFeature] -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text SegmentalFeature -> Parser Text [SegmentalFeature]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some Parser Text SegmentalFeature
segmentalFeatureXSampaP
optionalP :: Parser Segment
optionalP = Segment -> Segment
Optional
(Segment -> Segment) -> Parser Segment -> Parser Segment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ("(" Parser Text Text -> Parser Segment -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Parser Segment
withFeatureP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
pureSegmentP) Parser Segment -> Parser Text Text -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ")")
syllableXSampaP :: MultiSegment t => Parser (Syllable t)
syllableXSampaP :: Parser (Syllable t)
syllableXSampaP = Parser (Syllable t)
withStressP Parser (Syllable t) -> Parser (Syllable t) -> Parser (Syllable t)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (Syllable t)
withFeaturesP Parser (Syllable t) -> Parser (Syllable t) -> Parser (Syllable t)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> t Segment -> Syllable t
forall (t :: * -> *). t Segment -> Syllable t
Syllable (t Segment -> Syllable t)
-> Parser Text (t Segment) -> Parser (Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text (t Segment)
justSegments
where
justSegments :: Parser Text (t Segment)
justSegments = Parser Segment -> Parser Text (t Segment)
forall (t :: * -> *) a (f :: * -> *).
(Applicative t, Monoid (t a), Alternative f) =>
f a -> f (t a)
someT Parser Segment
segmentXSampaP
withFeaturesP :: Parser (Syllable t)
withFeaturesP = (SuprasegmentalFeature -> Syllable t -> Syllable t)
-> Syllable t -> [SuprasegmentalFeature] -> Syllable t
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature
(Syllable t -> [SuprasegmentalFeature] -> Syllable t)
-> Parser (Syllable t)
-> Parser Text ([SuprasegmentalFeature] -> Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (t Segment -> Syllable t
forall (t :: * -> *). t Segment -> Syllable t
Syllable (t Segment -> Syllable t)
-> Parser Text (t Segment) -> Parser (Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text (t Segment)
justSegments)
Parser Text ([SuprasegmentalFeature] -> Syllable t)
-> Parser Text [SuprasegmentalFeature] -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text SuprasegmentalFeature
-> Parser Text [SuprasegmentalFeature]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some Parser Text SuprasegmentalFeature
suprasegmentalFeatureXSampaP
withStressP :: Parser (Syllable t)
withStressP = (SuprasegmentalFeature -> Syllable t -> Syllable t)
-> Syllable t -> [SuprasegmentalFeature] -> Syllable t
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature (Syllable t -> [SuprasegmentalFeature] -> Syllable t)
-> Parser (Syllable t)
-> Parser Text ([SuprasegmentalFeature] -> Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Syllable t)
withStress
Parser Text ([SuprasegmentalFeature] -> Syllable t)
-> Parser Text [SuprasegmentalFeature] -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text SuprasegmentalFeature
-> Parser Text [SuprasegmentalFeature]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Text SuprasegmentalFeature
suprasegmentalFeatureXSampaP
where
withStress :: Parser (Syllable t)
withStress = SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature (SuprasegmentalFeature -> Syllable t -> Syllable t)
-> Parser Text SuprasegmentalFeature
-> Parser Text (Syllable t -> Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text SuprasegmentalFeature
stressXSampaP
Parser Text (Syllable t -> Syllable t)
-> Parser (Syllable t) -> Parser (Syllable t)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (t Segment -> Syllable t
forall (t :: * -> *). t Segment -> Syllable t
Syllable (t Segment -> Syllable t)
-> Parser Text (t Segment) -> Parser (Syllable t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text (t Segment)
justSegments)
syllablesXSampaP :: (MultiSegment t, Monoid (t (Syllable t)))
=> Parser (t (Syllable t))
syllablesXSampaP :: Parser (t (Syllable t))
syllablesXSampaP = Parser Text (Syllable t) -> Parser (t (Syllable t))
forall (t :: * -> *) a (f :: * -> *).
(Applicative t, Monoid (t a), Alternative f) =>
f a -> f (t a)
someT Parser Text (Syllable t)
withWS
where
withWS :: Parser Text (Syllable t)
withWS = Parser Text (Syllable t)
forall (t :: * -> *). MultiSegment t => Parser (Syllable t)
syllableXSampaP Parser Text (Syllable t)
-> Parser Text [Char] -> Parser Text (Syllable t)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char -> Parser Text [Char]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Text Char
P.space
consonantXSampaP :: Parser Consonant
consonantXSampaP :: Parser Text Consonant
consonantXSampaP = Parser Text Consonant
clickXSampaP
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
implosiveXSampaP
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
ejectiveXSampaP
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
doublyArticulatedXSampaP
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Consonant
pulmonicXSampaP
vowelXSampaP :: Parser Segment
vowelXSampaP :: Parser Segment
vowelXSampaP = Parser Segment
triphthongP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Segment
diphthongP Parser Segment -> Parser Segment -> Parser Segment
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Vowel -> Segment
Vowel (Vowel -> Segment) -> Parser Text Vowel -> Parser Segment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Vowel
pureP
where
diphthongP :: Parser Segment
diphthongP = Vowel -> Vowel -> Segment
Diphthong (Vowel -> Vowel -> Segment)
-> Parser Text Vowel -> Parser Text (Vowel -> Segment)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Vowel
pureP Parser Text (Vowel -> Segment)
-> Parser Text Vowel -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text Vowel
pureP
triphthongP :: Parser Segment
triphthongP = Vowel -> Vowel -> Vowel -> Segment
Triphthong (Vowel -> Vowel -> Vowel -> Segment)
-> Parser Text Vowel -> Parser Text (Vowel -> Vowel -> Segment)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Vowel
pureP Parser Text (Vowel -> Vowel -> Segment)
-> Parser Text Vowel -> Parser Text (Vowel -> Segment)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text Vowel
pureP Parser Text (Vowel -> Segment)
-> Parser Text Vowel -> Parser Segment
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text Vowel
pureP
pv :: Height -> Backness -> Roundedness -> Vowel
pv = Height -> Backness -> Roundedness -> Vowel
Pure
lowered :: Parser Text Text
lowered = "_o"
pureP :: Parser Text Vowel
pureP =
[Parser Text Vowel] -> Parser Text Vowel
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "e" Parser Text Text -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Front Roundedness
Unrounded
, "2" Parser Text Text -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Front Roundedness
Rounded
, "7" Parser Text Text -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Back Roundedness
Unrounded
, "o" Parser Text Text -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
lowered Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Back Roundedness
Rounded
, "i" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Front Roundedness
Unrounded
, "y" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Front Roundedness
Rounded
, "1" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Central Roundedness
Unrounded
, "}" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Central Roundedness
Rounded
, "M" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Back Roundedness
Unrounded
, "u" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Close Backness
Back Roundedness
Rounded
, "I" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearClose Backness
Front Roundedness
Unrounded
, "Y" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearClose Backness
Front Roundedness
Rounded
, "U" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearClose Backness
Back Roundedness
Rounded
, "e" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Front Roundedness
Unrounded
, "2" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Front Roundedness
Rounded
, "@" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Central Roundedness
Unrounded
, "8" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Central Roundedness
Rounded
, "7" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Back Roundedness
Unrounded
, "o" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
CloseMid Backness
Back Roundedness
Rounded
, "@" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Mid Backness
Central Roundedness
Unrounded
, "E" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Front Roundedness
Unrounded
, "9" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Front Roundedness
Rounded
, "3" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Central Roundedness
Unrounded
, "3" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Central Roundedness
Rounded
, "V" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Back Roundedness
Unrounded
, "O" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
OpenMid Backness
Back Roundedness
Rounded
, "{" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearOpen Backness
Front Roundedness
Unrounded
, "6" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
NearOpen Backness
Central Roundedness
Unrounded
, "a" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Front Roundedness
Unrounded
, "&" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Front Roundedness
Rounded
, "A" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Back Roundedness
Unrounded
, "Q" Parser Text Text -> Vowel -> Parser Text Vowel
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Height -> Backness -> Roundedness -> Vowel
pv Height
Open Backness
Back Roundedness
Rounded
]
pulmonicXSampaP :: Parser Consonant
pulmonicXSampaP :: Parser Text Consonant
pulmonicXSampaP =
[Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ Parser Text Consonant
biliabialP
, Parser Text Consonant
labioDentalP
, Parser Text Consonant
dentalP
, Parser Text Consonant
postAlveolarP
, Parser Text Consonant
retroflexP
, Parser Text Consonant
palatalP
, Parser Text Consonant
velarP
, Parser Text Consonant
uvularP
, Parser Text Consonant
pharyngealP
, Parser Text Consonant
glottalP
, Parser Text Consonant
alveolarP
]
where
biliabialP :: Parser Text Consonant
biliabialP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
bc :: Phonation -> Manner -> Consonant
bc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Bilabial
cs :: [Parser Text Consonant]
cs = [ "m" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "p" "p" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash
Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "b" "B"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "B" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "p" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "B" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced Manner
Trill
, "b" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiced Manner
Plosive
, "p" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
bc Phonation
Voiceless Manner
Plosive
]
labioDentalP :: Parser Text Consonant
labioDentalP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
ldc :: Phonation -> Manner -> Consonant
ldc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
LabioDental
cs :: [Parser Text Consonant]
cs = [ "F" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiced Manner
Nasal
, "f" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "v" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "P" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ldc Phonation
Voiced Manner
Approximant
]
dentalP :: Parser Text Consonant
dentalP = "T" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
dc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "D" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
dc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
where
dc :: Phonation -> Manner -> Consonant
dc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Dental
alveolarP :: Parser Text Consonant
alveolarP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
ac :: Phonation -> Manner -> Consonant
ac v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Alveolar
cs :: [Parser Text Consonant]
cs = [ "n" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t" "s"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "d" "z"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, "s" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "z" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "r" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Approximant
, "4" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Flap
, "r" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Trill
, "K" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless Manner
LateralFricative
, "K" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
LateralFricative
, "l" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
LateralApproximant
, "t" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiceless Manner
Plosive
, "d" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
ac Phonation
Voiced Manner
Plosive
]
postAlveolarP :: Parser Text Consonant
postAlveolarP = Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t" "S"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Text -> Parser Text Text
doubleArticulatedXSampa "d" "Z" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "S" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "Z" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
where
pc :: Phonation -> Manner -> Consonant
pc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
PostAlveolar
retroflexP :: Parser Text Consonant
retroflexP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
rc :: Phonation -> Manner -> Consonant
rc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Retroflex
retroflexDiacritic :: Parser Text Char
retroflexDiacritic = Char -> Parser Text Char
diacriticP '`'
cs :: [Parser Text Consonant]
cs =
[ "n" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t`" "s" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic
Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "d`" "s" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic
Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, "s" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "z" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "r" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Approximant
, "r" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Flap
, "l" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
LateralApproximant
, "t" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiceless Manner
Plosive
, "d" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
retroflexDiacritic Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
rc Phonation
Voiced Manner
Plosive
]
palatalP :: Parser Text Consonant
palatalP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
pc :: Phonation -> Manner -> Consonant
pc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Palatal
cs :: [Parser Text Consonant]
cs = [ "J" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t" "s" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash
Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "d" "z" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash
Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, "s" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "z" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "C" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "j" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "j" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Approximant
, "L" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
LateralApproximant
, "c" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless Manner
Plosive
, "J" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced Manner
Plosive
]
velarP :: Parser Text Consonant
velarP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
vc :: Phonation -> Manner -> Consonant
vc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Velar
cs :: [Parser Text Consonant]
cs = [ "N" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "k" "x"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "g" "G"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "x" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "G" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "m" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
Approximant
, "L" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
LateralApproximant
, "k" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiceless Manner
Plosive
, "g" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
vc Phonation
Voiced Manner
Plosive
]
uvularP :: Parser Text Consonant
uvularP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
uc :: Phonation -> Manner -> Consonant
uc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Uvular
cs :: [Parser Text Consonant]
cs = [ "N" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "q" "X"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "G\\" "R"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "X" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "R" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "R" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced Manner
Trill
, "q" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiceless Manner
Plosive
, "G" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
uc Phonation
Voiced Manner
Plosive
]
pharyngealP :: Parser Text Consonant
pharyngealP = "X" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "?" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
pc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
where
pc :: Phonation -> Manner -> Consonant
pc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Pharyngeal
glottalP :: Parser Text Consonant
glottalP = Text -> Text -> Parser Text Text
doubleArticulatedXSampa "?" "h" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash
Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiceless (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "?" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiceless Manner
Plosive
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "h" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiceless (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "h" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Manner -> Consonant
gc Phonation
Voiced (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
where
gc :: Phonation -> Manner -> Consonant
gc v :: Phonation
v = Phonation -> Place -> Manner -> Consonant
Pulmonic Phonation
v Place
Glottal
ejectiveXSampaP :: Parser Consonant
ejectiveXSampaP :: Parser Text Consonant
ejectiveXSampaP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs Parser Text Consonant -> Parser Text Text -> Parser Text Consonant
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
ejective
where
ejective :: Parser Text Text
ejective = "_>"
ej :: Place -> Manner -> Consonant
ej = Place -> Manner -> Consonant
Ejective
cs :: [Parser Text Consonant]
cs =
[ Text -> Text -> Parser Text Text
doubleArticulatedXSampa "q" "X" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Uvular (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t" "s" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t" "S"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
PostAlveolar (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t`" "s`"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Retroflex (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t" "s" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash
Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Palatal (Sibilance -> Manner
Affricate Sibilance
Sibilant)
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "k" "x" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Velar (Sibilance -> Manner
Affricate Sibilance
NonSibilant)
, "p" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Bilabial Manner
Plosive
, "p" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Bilabial (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "f" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
LabioDental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "T" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Dental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "t" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar Manner
Plosive
, "s" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Alveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "S" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
PostAlveolar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "t`" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Retroflex Manner
Plosive
, "s`" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Retroflex (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "c" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Palatal Manner
Plosive
, "s" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Palatal (Sibilance -> Manner
Fricative Sibilance
Sibilant)
, "k" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Velar Manner
Plosive
, "x" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Velar (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "q" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Uvular Manner
Plosive
, "X" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place -> Manner -> Consonant
ej Place
Uvular (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
]
implosiveXSampaP :: Parser Consonant
implosiveXSampaP :: Parser Text Consonant
implosiveXSampaP = Phonation -> Place -> Consonant
Implosive Phonation
Voiceless (Place -> Consonant) -> Parser Text Place -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text Place] -> Parser Text Place
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Place]
cs Parser Text Consonant -> Parser Text Text -> Parser Text Consonant
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
implosive Parser Text Consonant -> Parser Text Text -> Parser Text Consonant
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
voiceless
Parser Text Consonant
-> Parser Text Consonant -> Parser Text Consonant
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Phonation -> Place -> Consonant
Implosive Phonation
Voiced (Place -> Consonant) -> Parser Text Place -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text Place] -> Parser Text Place
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Place]
cs Parser Text Consonant -> Parser Text Text -> Parser Text Consonant
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Text
implosive
where
voiceless :: Parser Text Text
voiceless = "_0"
implosive :: Parser Text Text
implosive = "_<"
cs :: [Parser Text Place]
cs = [ "b" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Bilabial
, "d" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Alveolar
, "d`" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Retroflex
, "f" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Palatal
, "g" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Velar
, "G" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Uvular
]
clickXSampaP :: Parser Consonant
clickXSampaP :: Parser Text Consonant
clickXSampaP = Place -> Consonant
Click
(Place -> Consonant) -> Parser Text Place -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text Place] -> Parser Text Place
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "O" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Bilabial
, "|" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Dental
, "!" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Alveolar
, "|" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> "|" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
PostAlveolar
, "=" Parser Text Text -> Place -> Parser Text Place
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Place
Palatal
]
Parser Text Consonant -> Parser Text Char -> Parser Text Consonant
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text Char
slash
doublyArticulatedXSampaP :: Parser Consonant
doublyArticulatedXSampaP :: Parser Text Consonant
doublyArticulatedXSampaP = [Parser Text Consonant] -> Parser Text Consonant
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text Consonant]
cs
where
da :: Phonation -> Place -> Place -> Manner -> Consonant
da = Phonation -> Place -> Place -> Manner -> Consonant
DoublyArticulated
cs :: [Parser Text Consonant]
cs =
[ Text -> Text -> Parser Text Text
doubleArticulatedXSampa "n" "m" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Alveolar Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "t" "p"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Alveolar Manner
Plosive
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "d" "b"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Alveolar Manner
Plosive
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "N" "m" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Velar Manner
Nasal
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "k" "p"
Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Velar Manner
Plosive
, Text -> Text -> Parser Text Text
doubleArticulatedXSampa "g" "b" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Velar Manner
Plosive
, "H_0" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Palatal (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "H" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Palatal Manner
Approximant
, "W" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
Bilabial Place
Velar (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
, "w" Parser Text Text -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiced Place
Bilabial Place
Velar Manner
Approximant
, "x" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char -> Consonant -> Parser Text Consonant
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> Place -> Place -> Manner -> Consonant
da Phonation
Voiceless Place
PostAlveolar Place
Velar (Sibilance -> Manner
Fricative Sibilance
Sibilant)
]
segmentalFeatureXSampaP :: Parser SegmentalFeature
segmentalFeatureXSampaP :: Parser Text SegmentalFeature
segmentalFeatureXSampaP = Parser Text SegmentalFeature
secondaryArticulationP Parser Text SegmentalFeature
-> Parser Text SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Parser Text SegmentalFeature] -> Parser Text SegmentalFeature
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text SegmentalFeature]
fs
where
fs :: [Parser Text SegmentalFeature]
fs = [ "_0" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> SegmentalFeature
Voicing Phonation
Voiceless
, "_v" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Phonation -> SegmentalFeature
Voicing Phonation
Voiced
, "::" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
OverLong
, ":" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
HalfLong
, ":" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
Long
, "_X" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Length -> SegmentalFeature
Length Length
ExtraShort
, "_h" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Aspirated
, "_O" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
MoreRounded
, "_c" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
LessRounded
, "_+" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Advanced
, "_-" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Retracted
, "_\"" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Centralized
, "_x" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
MidCentralized
, "=" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Syllabic
, "_^" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
NonSyllabic
, "`" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Rhotacized
, "_t" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
BreathyVoice
, "_k" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
CreakyVoice
, "_w" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Labialized
, "'" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Palatalized
, "_G" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Velarized
, "_?" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Pharyngealized
, "_r" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Raised
, "_o" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Lowered
, "_A" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
AdvancedTongueRoot
, "_q" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
RetractedTongueRoot
, "_d" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Dentalized
, "_a" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Apical
, "_m" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Laminal
, "~" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
Nasalized
, "_l" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
LateralRelease
, "_}" Parser Text Text
-> SegmentalFeature -> Parser Text SegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SegmentalFeature
NoAudibleRelease
]
suprasegmentalFeatureXSampaP :: Parser SuprasegmentalFeature
suprasegmentalFeatureXSampaP :: Parser Text SuprasegmentalFeature
suprasegmentalFeatureXSampaP = [Parser Text SuprasegmentalFeature]
-> Parser Text SuprasegmentalFeature
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [Parser Text SuprasegmentalFeature]
fs
where
fs :: [Parser Text SuprasegmentalFeature]
fs =
[ Parser Text SuprasegmentalFeature
toneContourP, Parser Text SuprasegmentalFeature
levelToneP, "." Parser Text Text
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SuprasegmentalFeature
Break, "-" Parser Text Text -> Parser Text Char -> Parser Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text Char
slash Parser Text Char
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SuprasegmentalFeature
Linking ]
levelToneP :: Parser Text SuprasegmentalFeature
levelToneP = LevelTone -> SuprasegmentalFeature
LevelLexicalTone
(LevelTone -> SuprasegmentalFeature)
-> Parser Text LevelTone -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text LevelTone] -> Parser Text LevelTone
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "_T" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
ExtraHighTone
, "_H" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
HighTone
, "_M" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
MidTone
, "_L" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
LowTone
, "_B" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
ExtraLowTone
, "!" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
DownStep
, "^" Parser Text Text -> LevelTone -> Parser Text LevelTone
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> LevelTone
UpStep
]
toneContourP :: Parser Text SuprasegmentalFeature
toneContourP = ToneContour -> SuprasegmentalFeature
LexicalToneContour
(ToneContour -> SuprasegmentalFeature)
-> Parser Text ToneContour -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser Text ToneContour] -> Parser Text ToneContour
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum [ "_R" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
Rising
, "_F" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
Falling
, "_H_T" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
HighRising
, "_B_L" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
LowRising
, "_H_F" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
HighFalling
, "_L_B" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
LowFalling
, "_R_F" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
RisingFalling
, "_F_R" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
FallingRising
, "<R>" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
GlobalRise
, "<F>" Parser Text Text -> ToneContour -> Parser Text ToneContour
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ToneContour
GlobalFall
]
slash :: Parser Char
slash :: Parser Text Char
slash = Char -> Parser Text Char
P.char '\\'
doubleArticulatedXSampa :: Text -> Text -> Parser Text
doubleArticulatedXSampa :: Text -> Text -> Parser Text Text
doubleArticulatedXSampa x :: Text
x y :: Text
y = Text -> Parser Text Text
P.string (Text -> Parser Text Text) -> Text -> Parser Text Text
forall a b. (a -> b) -> a -> b
$ Text
x Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "_" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
y
stressXSampaP :: Parser SuprasegmentalFeature
stressXSampaP :: Parser Text SuprasegmentalFeature
stressXSampaP = ("\"" Parser Text Text -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "\'") Parser Text Text
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Stress -> SuprasegmentalFeature
Stress Stress
Primary Parser Text SuprasegmentalFeature
-> Parser Text SuprasegmentalFeature
-> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> "%" Parser Text Text
-> SuprasegmentalFeature -> Parser Text SuprasegmentalFeature
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Stress -> SuprasegmentalFeature
Stress Stress
Secondary