{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE UndecidableInstances #-}
module Language.IPA.Class
(
ReprIPA(..)
, ReprXSampa(..)
) where
import Data.Char ( digitToInt )
import Data.Function ( on )
import Data.Text ( Text )
import qualified Data.Text as T
import Language.IPA.Parser
( parseSegment
, parseSegmentXSampa
, parseSyllable
, parseSyllableXSampa
)
import Language.IPA.Types
class ReprIPA a where
toIPA :: a -> Maybe IPA
parseIPA :: Text -> Either IPAException a
class ReprXSampa a where
toXSampa :: a -> Maybe XSampa
parseXSampa :: Text -> Either IPAException a
instance MultiSegment t => ReprIPA (Syllable t) where
toIPA :: Syllable t -> Maybe IPA
toIPA = \case
Syllable ss :: t Segment
ss
| t Segment -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null t Segment
ss -> Maybe IPA
forall a. Maybe a
Nothing
| Bool
otherwise -> (IPA -> IPA -> IPA) -> t IPA -> IPA
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldr1 IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
(<>) (t IPA -> IPA) -> Maybe (t IPA) -> Maybe IPA
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Segment -> Maybe IPA) -> t Segment -> Maybe (t IPA)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA t Segment
ss
WithSuprasegmentalFeature feature :: SuprasegmentalFeature
feature s :: Syllable t
s ->
Syllable t -> SuprasegmentalFeature -> Maybe IPA
forall (t :: * -> *).
MultiSegment t =>
Syllable t -> SuprasegmentalFeature -> Maybe IPA
withSuprasegmentalFeature Syllable t
s SuprasegmentalFeature
feature
parseIPA :: Text -> Either IPAException (Syllable t)
parseIPA = Text -> Either IPAException (Syllable t)
forall (t :: * -> *).
MultiSegment t =>
Text -> Either IPAException (Syllable t)
parseSyllable
instance MultiSegment t => ReprXSampa (Syllable t) where
toXSampa :: Syllable t -> Maybe XSampa
toXSampa = \case
Syllable ss :: t Segment
ss
| t Segment -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null t Segment
ss -> Maybe XSampa
forall a. Maybe a
Nothing
| Bool
otherwise -> (XSampa -> XSampa -> XSampa) -> t XSampa -> XSampa
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldr1 XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
(<>) (t XSampa -> XSampa) -> Maybe (t XSampa) -> Maybe XSampa
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Segment -> Maybe XSampa) -> t Segment -> Maybe (t XSampa)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa t Segment
ss
WithSuprasegmentalFeature feature :: SuprasegmentalFeature
feature s :: Syllable t
s ->
Syllable t -> SuprasegmentalFeature -> Maybe XSampa
forall (t :: * -> *).
MultiSegment t =>
Syllable t -> SuprasegmentalFeature -> Maybe XSampa
withSuprasegmentalFeatureXSampa Syllable t
s SuprasegmentalFeature
feature
parseXSampa :: Text -> Either IPAException (Syllable t)
parseXSampa = Text -> Either IPAException (Syllable t)
forall (t :: * -> *).
MultiSegment t =>
Text -> Either IPAException (Syllable t)
parseSyllableXSampa
instance ReprIPA Segment where
toIPA :: Segment -> Maybe IPA
toIPA = \case
Zero -> Text -> Maybe IPA
mkJustIPA "∅"
Consonant c :: Consonant
c -> Consonant -> Maybe IPA
consonant Consonant
c
Vowel v :: Vowel
v -> Vowel -> Maybe IPA
vowel Vowel
v
WithSegmentalFeature feature :: SegmentalFeature
feature s :: Segment
s -> Segment -> SegmentalFeature -> Maybe IPA
withSegmentalFeature Segment
s SegmentalFeature
feature
Optional s :: Segment
s -> do
IPA { .. } <- Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA Segment
s
IPA -> Maybe IPA
forall (m :: * -> *) a. Monad m => a -> m a
return (IPA -> Maybe IPA) -> (Text -> IPA) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> IPA
mkIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "(" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
unIPA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ")"
parseIPA :: Text -> Either IPAException Segment
parseIPA = Text -> Either IPAException Segment
parseSegment
instance ReprXSampa Segment where
toXSampa :: Segment -> Maybe XSampa
toXSampa = \case
Zero -> Maybe XSampa
forall a. Maybe a
Nothing
Vowel v :: Vowel
v -> Vowel -> Maybe XSampa
vowelXSampa Vowel
v
Consonant c :: Consonant
c -> Consonant -> Maybe XSampa
consonantXSampa Consonant
c
WithSegmentalFeature feature :: SegmentalFeature
feature s :: Segment
s -> Segment -> SegmentalFeature -> Maybe XSampa
withSegmentalFeatureXSampa Segment
s SegmentalFeature
feature
Optional s :: Segment
s -> do
XSampa { .. } <- Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa Segment
s
XSampa -> Maybe XSampa
forall (m :: * -> *) a. Monad m => a -> m a
return (XSampa -> Maybe XSampa)
-> (Text -> XSampa) -> Text -> Maybe XSampa
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> XSampa
XSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ "(" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
unXSampa Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ")"
parseXSampa :: Text -> Either IPAException Segment
parseXSampa = Text -> Either IPAException Segment
parseSegmentXSampa
mkJustIPA :: Text -> Maybe IPA
mkJustIPA :: Text -> Maybe IPA
mkJustIPA = IPA -> Maybe IPA
forall a. a -> Maybe a
Just (IPA -> Maybe IPA) -> (Text -> IPA) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> IPA
mkIPA
mkIPAOp :: ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp :: (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp f :: b -> Maybe IPA
f x :: a
x y :: b
y = IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
(<>) (IPA -> IPA -> IPA) -> Maybe IPA -> Maybe (IPA -> IPA)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA a
x Maybe (IPA -> IPA) -> Maybe IPA -> Maybe IPA
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> b -> Maybe IPA
f b
y
withSuprasegmentalFeature
:: MultiSegment t => Syllable t -> SuprasegmentalFeature -> Maybe IPA
withSuprasegmentalFeature :: Syllable t -> SuprasegmentalFeature -> Maybe IPA
withSuprasegmentalFeature s :: Syllable t
s = \case
LevelLexicalTone tone :: LevelTone
tone -> (LevelTone -> Maybe IPA) -> Syllable t -> LevelTone -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp LevelTone -> Maybe IPA
ipaTone Syllable t
s LevelTone
tone
where
ipaTone :: LevelTone -> Maybe IPA
ipaTone = \case
ExtraHighTone -> Text -> Maybe IPA
mkJustIPA "˥"
HighTone -> Text -> Maybe IPA
mkJustIPA "˦"
MidTone -> Text -> Maybe IPA
mkJustIPA "˧"
LowTone -> Text -> Maybe IPA
mkJustIPA "˨"
ExtraLowTone -> Text -> Maybe IPA
mkJustIPA "˩"
_ -> Maybe IPA
forall a. Maybe a
Nothing
LevelLexicalToneDiacritic tone :: LevelTone
tone -> (LevelTone -> Maybe IPA) -> Syllable t -> LevelTone -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp LevelTone -> Maybe IPA
ipaTone Syllable t
s LevelTone
tone
where
ipaTone :: LevelTone -> Maybe IPA
ipaTone = \case
ExtraHighTone -> Text -> Maybe IPA
mkJustIPA "\x030b"
HighTone -> Text -> Maybe IPA
mkJustIPA "\x0341"
MidTone -> Text -> Maybe IPA
mkJustIPA "\x0304"
LowTone -> Text -> Maybe IPA
mkJustIPA "\x0340"
ExtraLowTone -> Text -> Maybe IPA
mkJustIPA "\x030f"
DownStep -> Text -> Maybe IPA
mkJustIPA "ꜜ"
UpStep -> Text -> Maybe IPA
mkJustIPA "ꜛ"
LexicalToneContour tone :: ToneContour
tone -> (ToneContour -> Maybe IPA)
-> Syllable t -> ToneContour -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp ToneContour -> Maybe IPA
ipaToneContour Syllable t
s ToneContour
tone
where
ipaToneContour :: ToneContour -> Maybe IPA
ipaToneContour = \case
Rising -> Text -> Maybe IPA
mkJustIPA "˩˥"
Falling -> Text -> Maybe IPA
mkJustIPA "˥˩"
HighRising -> Text -> Maybe IPA
mkJustIPA "˧˥"
LowRising -> Text -> Maybe IPA
mkJustIPA "˩˧"
HighFalling -> Text -> Maybe IPA
mkJustIPA "˥˧"
LowFalling -> Text -> Maybe IPA
mkJustIPA "˧˩"
RisingFalling -> Text -> Maybe IPA
mkJustIPA "˧˦˨"
FallingRising -> Text -> Maybe IPA
mkJustIPA "˧˨˦"
GlobalRise -> Text -> Maybe IPA
mkJustIPA "↗"
GlobalFall -> Text -> Maybe IPA
mkJustIPA "↙"
LexicalToneContourDiacritic tone :: ToneContour
tone -> (ToneContour -> Maybe IPA)
-> Syllable t -> ToneContour -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp ToneContour -> Maybe IPA
ipaToneContour Syllable t
s ToneContour
tone
where
ipaToneContour :: ToneContour -> Maybe IPA
ipaToneContour = \case
Rising -> Text -> Maybe IPA
mkJustIPA "\x0302"
Falling -> Text -> Maybe IPA
mkJustIPA "\x030c"
HighRising -> Text -> Maybe IPA
mkJustIPA "\x1dc9"
LowRising -> Text -> Maybe IPA
mkJustIPA "\x1dc5"
HighFalling -> Text -> Maybe IPA
mkJustIPA "\x1dc7"
LowFalling -> Text -> Maybe IPA
mkJustIPA "\x1dc6"
RisingFalling -> Text -> Maybe IPA
mkJustIPA "\x1dc8"
FallingRising -> Text -> Maybe IPA
mkJustIPA "\x1dc9"
_ -> Maybe IPA
forall a. Maybe a
Nothing
ToneNumber ns :: Int
ns -> IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
(<>) (IPA -> IPA -> IPA) -> Maybe IPA -> Maybe (IPA -> IPA)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Syllable t -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA Syllable t
s Maybe (IPA -> IPA) -> Maybe IPA -> Maybe IPA
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe IPA
mkJustIPA Text
digits
where
digits :: Text
digits = [Text] -> Text
T.concat ([Text] -> Text) -> [Text] -> Text
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Int -> String
code (Int -> String) -> (Char -> Int) -> Char -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Int
digitToInt (Char -> String) -> String -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> String
forall a. Show a => a -> String
show Int
ns)
code :: Int -> String
code = \case
0 -> "\x2070"
1 -> "\x00b9"
2 -> "\x00b2"
3 -> "\x00b3"
4 -> "\x2074"
5 -> "\x2075"
6 -> "\x2076"
7 -> "\x2077"
8 -> "\x2078"
9 -> "\x2079"
_ -> String
forall a. Monoid a => a
mempty
Stress stress :: Stress
stress -> (Stress -> Maybe IPA) -> Syllable t -> Stress -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp Stress -> Maybe IPA
ipaStress Syllable t
s Stress
stress
where
ipaStress :: Stress -> Maybe IPA
ipaStress Primary = Text -> Maybe IPA
mkJustIPA "ˈ"
ipaStress Secondary = Text -> Maybe IPA
mkJustIPA "ˌ"
Break -> IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
(<>) (IPA -> IPA -> IPA) -> Maybe IPA -> Maybe (IPA -> IPA)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Syllable t -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA Syllable t
s Maybe (IPA -> IPA) -> Maybe IPA -> Maybe IPA
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe IPA
mkJustIPA "."
Linking -> IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
(<>) (IPA -> IPA -> IPA) -> Maybe IPA -> Maybe (IPA -> IPA)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Syllable t -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA Syllable t
s Maybe (IPA -> IPA) -> Maybe IPA -> Maybe IPA
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe IPA
mkJustIPA "‿"
withSegmentalFeature :: Segment -> SegmentalFeature -> Maybe IPA
withSegmentalFeature :: Segment -> SegmentalFeature -> Maybe IPA
withSegmentalFeature s :: Segment
s = \case
Voicing v :: Phonation
v -> (Phonation -> Maybe IPA) -> Segment -> Phonation -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp Phonation -> Maybe IPA
ipaVoicing Segment
s Phonation
v
where
ipaVoicing :: Phonation -> Maybe IPA
ipaVoicing = \case
Voiceless -> Text -> Maybe IPA
mkJustIPA "\x030a"
Voiced -> Text -> Maybe IPA
mkJustIPA "\x030c"
Length l :: Length
l -> (Length -> Maybe IPA) -> Segment -> Length -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp Length -> Maybe IPA
ipaLength Segment
s Length
l
where
ipaLength :: Length -> Maybe IPA
ipaLength = \case
OverLong -> Text -> Maybe IPA
mkJustIPA "ːː"
HalfLong -> Text -> Maybe IPA
mkJustIPA "ˑ"
Long -> Text -> Maybe IPA
mkJustIPA "ː"
Short -> Text -> Maybe IPA
mkJustIPA Text
forall a. Monoid a => a
mempty
ExtraShort -> Text -> Maybe IPA
mkJustIPA "\x0306"
SecondaryArticulation sa :: Segment
sa -> (Segment -> Maybe IPA) -> Segment -> Segment -> Maybe IPA
forall a b. ReprIPA a => (b -> Maybe IPA) -> a -> b -> Maybe IPA
mkIPAOp Segment -> Maybe IPA
secondaryArticulation Segment
s Segment
sa
feature :: SegmentalFeature
feature -> IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
(<>) (IPA -> IPA -> IPA) -> Maybe IPA -> Maybe (IPA -> IPA)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA Segment
s Maybe (IPA -> IPA) -> Maybe IPA -> Maybe IPA
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> case SegmentalFeature
feature of
Aspirated -> Text -> Maybe IPA
mkJustIPA "\x02b0"
MoreRounded -> Text -> Maybe IPA
mkJustIPA "\x0339"
LessRounded -> Text -> Maybe IPA
mkJustIPA "\x031c"
Advanced -> Text -> Maybe IPA
mkJustIPA "\x031f"
Retracted -> Text -> Maybe IPA
mkJustIPA "\x0320"
Centralized -> Text -> Maybe IPA
mkJustIPA "\x0308"
MidCentralized -> Text -> Maybe IPA
mkJustIPA "\x033d"
Compressed -> Text -> Maybe IPA
mkJustIPA "\x1d5d"
Syllabic -> Text -> Maybe IPA
mkJustIPA "\x0329"
NonSyllabic -> Text -> Maybe IPA
mkJustIPA "\x032f"
Rhotacized -> Text -> Maybe IPA
mkJustIPA "\x02de"
BreathyVoice -> Text -> Maybe IPA
mkJustIPA "\x0324"
CreakyVoice -> Text -> Maybe IPA
mkJustIPA "\x0330"
LinguoLabialized -> Text -> Maybe IPA
mkJustIPA "\x033c"
Labialized -> Text -> Maybe IPA
mkJustIPA "\x02b7"
Palatalized -> Text -> Maybe IPA
mkJustIPA "\x02b2"
Velarized -> Text -> Maybe IPA
mkJustIPA "\x02e0"
Pharyngealized -> Text -> Maybe IPA
mkJustIPA "\x02e4"
Raised -> Text -> Maybe IPA
mkJustIPA "\x031d"
Lowered -> Text -> Maybe IPA
mkJustIPA "\x031e"
AdvancedTongueRoot -> Text -> Maybe IPA
mkJustIPA "\x0318"
RetractedTongueRoot -> Text -> Maybe IPA
mkJustIPA "\x0319"
Dentalized -> Text -> Maybe IPA
mkJustIPA "\x032a"
Apical -> Text -> Maybe IPA
mkJustIPA "\x033a"
Laminal -> Text -> Maybe IPA
mkJustIPA "\x033b"
Nasalized -> Text -> Maybe IPA
mkJustIPA "\x0303"
NasalRelease -> Text -> Maybe IPA
mkJustIPA "\x207f"
LateralRelease -> Text -> Maybe IPA
mkJustIPA "\x02e1"
NoAudibleRelease -> Text -> Maybe IPA
mkJustIPA "\x031a"
_ -> Text -> Maybe IPA
mkJustIPA ""
doubleArticulated :: Text -> Text -> Text
doubleArticulated :: Text -> Text -> Text
doubleArticulated x :: Text
x y :: Text
y = Text
x Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
breve Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
y
where
breve :: Text
breve = "\x0361"
voiceless :: Bool
-> Text
-> Text
voiceless :: Bool -> Text -> Text
voiceless desc :: Bool
desc = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Bool -> Text
forall p. IsString p => Bool -> p
getC Bool
desc)
where
getC :: Bool -> p
getC True = "\x030a"
getC False = "\x0325"
dentalized :: Text -> Text
dentalized :: Text -> Text
dentalized = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\x032a")
raisedMod :: Text -> Text
raisedMod :: Text -> Text
raisedMod = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\x02d4")
raised :: Text -> Text
raised :: Text -> Text
raised = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\x031d")
retracted :: Text -> Text
retracted :: Text -> Text
retracted = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\x0320")
flapped :: Text -> Text
flapped :: Text -> Text
flapped = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\x0306")
consonant :: Consonant -> Maybe IPA
consonant :: Consonant -> Maybe IPA
consonant = \case
e :: Consonant
e@Ejective {} -> Consonant -> Maybe IPA
ejective Consonant
e
i :: Consonant
i@Implosive {} -> Consonant -> Maybe IPA
implosive Consonant
i
Pulmonic Voiceless Bilabial Nasal -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Bilabial Manner
Nasal)
Pulmonic Voiced Bilabial Nasal -> Text -> Maybe IPA
mkJustIPA "m"
Pulmonic Voiced Bilabial Plosive -> Text -> Maybe IPA
mkJustIPA "b"
Pulmonic Voiceless Bilabial Plosive -> Text -> Maybe IPA
mkJustIPA "p"
Pulmonic Voiceless Bilabial (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "p" "ɸ"
Pulmonic Voiced Bilabial (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "b" "β"
Pulmonic Voiceless Bilabial (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ɸ"
Pulmonic Voiced Bilabial (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "β"
Pulmonic Voiced Bilabial Flap -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Advanced
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
LabioDental Manner
Flap)
Pulmonic Voiceless Bilabial Trill -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
False "ʙ"
Pulmonic Voiced Bilabial Trill -> Text -> Maybe IPA
mkJustIPA "ʙ"
Pulmonic Voiced LabioDental Nasal -> Text -> Maybe IPA
mkJustIPA "ɱ"
Pulmonic v :: Phonation
v LabioDental Plosive -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Dentalized
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
v Place
Bilabial Manner
Plosive)
Pulmonic v :: Phonation
v LabioDental (Affricate NonSibilant) -> do
IPA stop :: Text
stop <- Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA (Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
v Place
LabioDental Manner
Plosive
IPA fricative :: Text
fricative <- Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
v Place
LabioDental (Sibilance -> Manner
Fricative Sibilance
NonSibilant)
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated Text
stop Text
fricative
Pulmonic Voiceless LabioDental (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "f"
Pulmonic Voiced LabioDental (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "v"
Pulmonic Voiced LabioDental Approximant -> Text -> Maybe IPA
mkJustIPA "ʋ"
Pulmonic Voiced LabioDental Flap -> Text -> Maybe IPA
mkJustIPA "ⱱ"
Pulmonic Voiced LinguoLabial manner :: Manner
manner
| Manner
manner Manner -> [Manner] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [ Manner
Nasal, Manner
Plosive, Sibilance -> Manner
Fricative Sibilance
NonSibilant, Manner
Flap ] ->
Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
LinguoLabialized
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Alveolar Manner
manner)
Pulmonic Voiceless LinguoLabial manner :: Manner
manner
| Manner
manner Manner -> [Manner] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [ Manner
Plosive, Sibilance -> Manner
Fricative Sibilance
NonSibilant ] -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
LinguoLabialized
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiceless
Place
Alveolar
Manner
manner)
Pulmonic Voiceless Dental (Affricate NonSibilant) -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated (Text -> Text
dentalized "t") "θ"
Pulmonic Voiced Dental (Affricate NonSibilant) -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated (Text -> Text
dentalized "d") "ð"
Pulmonic Voiceless Dental (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "θ"
Pulmonic Voiced Dental (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ð"
Pulmonic Voiceless Alveolar Nasal -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Alveolar Manner
Nasal)
Pulmonic Voiced Alveolar Nasal -> Text -> Maybe IPA
mkJustIPA "n"
Pulmonic Voiceless Alveolar Plosive -> Text -> Maybe IPA
mkJustIPA "t"
Pulmonic Voiced Alveolar Plosive -> Text -> Maybe IPA
mkJustIPA "d"
Pulmonic Voiceless Alveolar (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "s"
Pulmonic Voiced Alveolar (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "d" "z"
Pulmonic Voiceless Alveolar (Affricate NonSibilant) -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" (Text -> Text
raisedMod (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
True "ɹ")
Pulmonic Voiced Alveolar (Affricate NonSibilant) -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "d" (Text -> Text
raisedMod "ɹ")
Pulmonic Voiceless Alveolar (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "s"
Pulmonic Voiced Alveolar (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "z"
Pulmonic Voiced Alveolar Approximant -> Text -> Maybe IPA
mkJustIPA "ɹ"
Pulmonic Voiceless Alveolar Flap -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
False "ɾ"
Pulmonic Voiced Alveolar Flap -> Text -> Maybe IPA
mkJustIPA "ɾ"
Pulmonic Voiceless Alveolar Trill -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Alveolar Manner
Trill)
Pulmonic Voiced Alveolar Trill -> Text -> Maybe IPA
mkJustIPA "r"
Pulmonic Voiceless Alveolar LateralAffricate -> Text -> Maybe IPA
mkJustIPA "tɬ"
Pulmonic Voiced Alveolar LateralAffricate -> Text -> Maybe IPA
mkJustIPA "dɮ"
Pulmonic Voiceless Alveolar LateralFricative -> Text -> Maybe IPA
mkJustIPA "ɬ"
Pulmonic Voiced Alveolar LateralFricative -> Text -> Maybe IPA
mkJustIPA "ɮ"
Pulmonic Voiced Alveolar LateralApproximant -> Text -> Maybe IPA
mkJustIPA "l"
Pulmonic Voiceless Alveolar LateralFlap -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Alveolar Manner
LateralFlap)
Pulmonic Voiced Alveolar LateralFlap -> Text -> Maybe IPA
mkJustIPA "ɺ"
Pulmonic Voiceless PostAlveolar (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "ʃ"
Pulmonic Voiced PostAlveolar (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "d" "ʒ"
Pulmonic Voiceless PostAlveolar (Affricate NonSibilant) -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" (Text -> Text
raisedMod (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Text -> Text
voiceless Bool
True (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
retracted "ɹ")
Pulmonic Voiced PostAlveolar (Affricate NonSibilant) -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "d" (Text -> Text
raisedMod (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
retracted "ɹ")
Pulmonic Voiceless PostAlveolar (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "ʃ"
Pulmonic Voiced PostAlveolar (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "ʒ"
Pulmonic Voiceless PostAlveolar (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> (Text -> Text) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
raisedMod (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Text -> Text
voiceless Bool
True (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
retracted (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ɹ"
Pulmonic Voiced PostAlveolar (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> (Text -> Text) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
raisedMod (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
retracted "ɹ"
Pulmonic Voiceless Retroflex Nasal -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Retroflex Manner
Nasal)
Pulmonic Voiced Retroflex Nasal -> Text -> Maybe IPA
mkJustIPA "ɳ"
Pulmonic Voiceless Retroflex Plosive -> Text -> Maybe IPA
mkJustIPA "ʈ"
Pulmonic Voiced Retroflex Plosive -> Text -> Maybe IPA
mkJustIPA "ɖ"
Pulmonic Voiceless Retroflex (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ʈ" "ʂ"
Pulmonic Voiced Retroflex (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ɖ" "ʐ"
Pulmonic Voiceless Retroflex (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "ʂ"
Pulmonic Voiced Retroflex (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "ʐ"
Pulmonic Voiced Retroflex (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
raisedMod "ɻ"
Pulmonic Voiced Retroflex Approximant -> Text -> Maybe IPA
mkJustIPA "ɻ"
Pulmonic Voiceless Retroflex Flap -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Retroflex Manner
Flap)
Pulmonic Voiced Retroflex Flap -> Text -> Maybe IPA
mkJustIPA "ɽ"
Pulmonic Voiceless Retroflex Trill ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
True "ɽ" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Bool -> Text -> Text
voiceless Bool
False "r"
Pulmonic Voiced Retroflex Trill -> Text -> Maybe IPA
mkJustIPA "ɽr"
Pulmonic Voiceless Retroflex LateralAffricate -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ʈ" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> (Text -> Text
raisedMod (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Text -> Text
voiceless Bool
True (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ "ɭ")
Pulmonic Voiced Retroflex LateralAffricate ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ɖ" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
raisedMod "ɭ"
Pulmonic Voiceless Retroflex LateralFricative ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> (Text -> Text) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
raisedMod (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Text -> Text
voiceless Bool
True (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ɭ"
Pulmonic Voiced Retroflex LateralFricative -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
raisedMod "ɭ"
Pulmonic Voiced Retroflex LateralApproximant -> Text -> Maybe IPA
mkJustIPA "ɭ"
Pulmonic Voiceless Retroflex LateralFlap ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> (Text -> Text) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Text -> Text
voiceless Bool
True (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
flapped "ɭ"
Pulmonic Voiced Retroflex LateralFlap -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
flapped "ɭ"
Pulmonic Voiceless Palatal Nasal -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Palatal Manner
Nasal)
Pulmonic Voiced Palatal Nasal -> Text -> Maybe IPA
mkJustIPA "ɲ"
Pulmonic Voiceless Palatal Plosive -> Text -> Maybe IPA
mkJustIPA "c"
Pulmonic Voiced Palatal Plosive -> Text -> Maybe IPA
mkJustIPA "ɟ"
Pulmonic Voiceless Palatal (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "ɕ"
Pulmonic Voiced Palatal (Affricate Sibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "d" "ʑ"
Pulmonic Voiceless Palatal (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "c" "ç"
Pulmonic Voiced Palatal (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ɟ" "ʝ"
Pulmonic Voiceless Palatal (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "ɕ"
Pulmonic Voiced Palatal (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "ʑ"
Pulmonic Voiceless Palatal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ç"
Pulmonic Voiced Palatal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ʝ"
Pulmonic Voiced Palatal Approximant -> Text -> Maybe IPA
mkJustIPA "j"
Pulmonic Voiceless Palatal LateralAffricate -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "c" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> (Bool -> Text -> Text
voiceless Bool
True (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
raised (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ "ʎ")
Pulmonic Voiced Palatal LateralAffricate ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ɟ" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
raised "ʎ"
Pulmonic Voiceless Palatal LateralFricative ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> (Text -> Text) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
raised (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Text -> Text
voiceless Bool
True (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ʎ"
Pulmonic Voiced Palatal LateralFricative -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
raised "ʎ"
Pulmonic Voiced Palatal LateralApproximant -> Text -> Maybe IPA
mkJustIPA "ʎ"
Pulmonic Voiced Palatal LateralFlap -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
flapped "ʎ"
Pulmonic Voiceless Velar Nasal -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Velar Manner
Nasal)
Pulmonic Voiced Velar Nasal -> Text -> Maybe IPA
mkJustIPA "ŋ"
Pulmonic Voiceless Velar Plosive -> Text -> Maybe IPA
mkJustIPA "k"
Pulmonic Voiced Velar Plosive -> Text -> Maybe IPA
mkJustIPA "g"
Pulmonic Voiceless Velar (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "k" "x"
Pulmonic Voiced Velar (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "g" "ɣ"
Pulmonic Voiceless Velar (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "x"
Pulmonic Voiced Velar (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ɣ"
Pulmonic Voiced Velar Approximant -> Text -> Maybe IPA
mkJustIPA "ɰ"
Pulmonic Voiceless Velar LateralAffricate -> Text -> Maybe IPA
mkJustIPA
(Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "k" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> (Text -> Text
raised (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
True "ʟ")
Pulmonic Voiced Velar LateralAffricate -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ɡ" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
raised "ʟ"
Pulmonic Voiceless Velar LateralFricative ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> (Text -> Text) -> Text -> Maybe IPA
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Text -> Text
voiceless Bool
True (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
raised "ʟ"
Pulmonic Voiced Velar LateralFricative -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
raised "ʟ"
Pulmonic Voiced Velar LateralApproximant -> Text -> Maybe IPA
mkJustIPA "ʟ"
Pulmonic Voiced Velar LateralFlap -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
flapped "ʟ"
Pulmonic Voiced Uvular Nasal -> Text -> Maybe IPA
mkJustIPA "ɴ"
Pulmonic Voiceless Uvular Plosive -> Text -> Maybe IPA
mkJustIPA "q"
Pulmonic Voiced Uvular Plosive -> Text -> Maybe IPA
mkJustIPA "ɢ"
Pulmonic Voiceless Uvular (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "q" "χ"
Pulmonic Voiced Uvular (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ɢ" "ʁ"
Pulmonic Voiceless Uvular (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "χ"
Pulmonic Voiced Uvular (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ʁ"
Pulmonic Voiced Uvular Flap -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
flapped "ɢ"
Pulmonic Voiceless Uvular Trill -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Uvular Manner
Trill)
Pulmonic Voiced Uvular Trill -> Text -> Maybe IPA
mkJustIPA "ʀ"
Pulmonic Voiced Uvular LateralApproximant -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
retracted "ʟ"
Pulmonic Voiceless Pharyngeal Plosive -> Text -> Maybe IPA
mkJustIPA "ʡ"
Pulmonic Voiced Pharyngeal (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ʡ" "ʢ"
Pulmonic Voiceless Pharyngeal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ħ"
Pulmonic Voiced Pharyngeal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ʕ"
Pulmonic Voiced Pharyngeal Flap -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text
flapped "ʡ"
Pulmonic Voiceless Pharyngeal Trill -> Text -> Maybe IPA
mkJustIPA "ʜ"
Pulmonic Voiced Pharyngeal Trill -> Text -> Maybe IPA
mkJustIPA "ʢ"
Pulmonic Voiceless Glottal Plosive -> Text -> Maybe IPA
mkJustIPA "ʔ"
Pulmonic Voiceless Glottal (Affricate NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ʔ" "h"
Pulmonic Voiceless Glottal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "h"
Pulmonic Voiced Glottal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "ɦ"
Pulmonic Voiced Glottal Approximant -> Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ "ʔ" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\x031e"
Click Bilabial -> Text -> Maybe IPA
mkJustIPA "ʘ"
Click Dental -> Text -> Maybe IPA
mkJustIPA "ǀ"
Click Alveolar -> Text -> Maybe IPA
mkJustIPA "ǃ"
Click PostAlveolar -> Text -> Maybe IPA
mkJustIPA "ǁ"
Click Palatal -> Text -> Maybe IPA
mkJustIPA "ǂ"
DoublyArticulated Voiced Bilabial Alveolar Nasal ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "n" "m"
DoublyArticulated Voiceless Bilabial Alveolar Plosive ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "p"
DoublyArticulated Voiced Bilabial Alveolar Plosive ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "d" "b"
DoublyArticulated Voiced Bilabial Velar Nasal ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ŋ" "m"
DoublyArticulated Voiceless Bilabial Velar Plosive ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "k" "p"
DoublyArticulated Voiced Bilabial Velar Plosive ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "g" "b"
DoublyArticulated Voiceless Uvular Pharyngeal Plosive ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "q" "ʡ"
DoublyArticulated Voiceless Bilabial Palatal (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA (Text -> Maybe IPA) -> Text -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
True "ɥ"
DoublyArticulated Voiced Bilabial Palatal Approximant -> Text -> Maybe IPA
mkJustIPA "ɥ"
DoublyArticulated Voiceless Bilabial Velar (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA "ʍ"
DoublyArticulated Voiced Bilabial Velar Approximant -> Text -> Maybe IPA
mkJustIPA "w"
DoublyArticulated Voiced Alveolar Velar LateralApproximant ->
Text -> Maybe IPA
mkJustIPA "ɫ"
DoublyArticulated Voiceless PostAlveolar Velar (Fricative Sibilant) ->
Text -> Maybe IPA
mkJustIPA "ɧ"
DoublyArticulated Voiceless LabioDental Velar (Fricative Sibilant) ->
Text -> Maybe IPA
mkJustIPA "ɧ"
_ -> Maybe IPA
forall a. Maybe a
Nothing
implosive :: Consonant -> Maybe IPA
implosive :: Consonant -> Maybe IPA
implosive (Implosive Voiceless place :: Place
place) = Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Segment
ImplosiveConsonant Phonation
Voiced Place
place)
implosive c :: Consonant
c = case Consonant
c of
Implosive Voiced Bilabial -> Text -> Maybe IPA
mkJustIPA "ɓ"
Implosive Voiced Alveolar -> Text -> Maybe IPA
mkJustIPA "ɗ"
Implosive Voiced Retroflex -> Text -> Maybe IPA
mkJustIPA "ᶑ"
Implosive Voiced Palatal -> Text -> Maybe IPA
mkJustIPA "ʄ"
Implosive Voiced Velar -> Text -> Maybe IPA
mkJustIPA "ɠ"
Implosive Voiced Uvular -> Text -> Maybe IPA
mkJustIPA "ʛ"
Implosive Voiced Dental -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Dentalized (Phonation -> Place -> Segment
ImplosiveConsonant Phonation
Voiced Place
Alveolar)
_ -> Maybe IPA
forall a. Maybe a
Nothing
ejective :: Consonant -> Maybe IPA
ejective :: Consonant -> Maybe IPA
ejective c :: Consonant
c = Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
(<>) (Text -> Text -> Text) -> Maybe Text -> Maybe (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Consonant -> Maybe Text
getEj Consonant
c Maybe (Text -> Text) -> Maybe Text -> Maybe Text
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
ej Maybe Text -> (Text -> Maybe IPA) -> Maybe IPA
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Maybe IPA
mkJustIPA
where
ej :: Text
ej = "\x02bc"
getEj :: Consonant -> Maybe Text
getEj = \case
Ejective Bilabial Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "p"
Ejective Bilabial (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "ɸ"
Ejective LabioDental (Affricate NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just
(Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated (Text -> Text
dentalized "p") "f"
Ejective LabioDental (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "f"
Ejective Dental Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
dentalized "t"
Ejective Dental (Affricate NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just
(Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated (Text -> Text
dentalized "t") "θ"
Ejective Dental (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "θ"
Ejective Alveolar Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "t"
Ejective Alveolar (Affricate Sibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "s"
Ejective Alveolar (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "s"
Ejective Alveolar LateralAffricate ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "ɬ"
Ejective Alveolar LateralFricative -> Text -> Maybe Text
forall a. a -> Maybe a
Just "ɬ"
Ejective PostAlveolar (Affricate Sibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "ʃ"
Ejective PostAlveolar (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "ʃ"
Ejective Retroflex Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "ʈ"
Ejective Retroflex (Affricate Sibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "ʈ" "ʂ"
Ejective Retroflex (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "ʂ"
Ejective Palatal Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "c"
Ejective Palatal (Affricate Sibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "t" "ɕ"
Ejective Palatal (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "ɕ"
Ejective Palatal LateralAffricate -> Text -> Maybe Text
forall a. a -> Maybe a
Just
(Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ "c" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> (Text -> Text
raised (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
True "ʎ")
Ejective Velar Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "k"
Ejective Velar (Affricate NonSibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "k" "x"
Ejective Velar (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "x"
Ejective Velar LateralAffricate -> Text -> Maybe Text
forall a. a -> Maybe a
Just
(Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ "k" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> (Text -> Text
raised (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Bool -> Text -> Text
voiceless Bool
True "ʟ")
Ejective Uvular Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "q"
Ejective Uvular (Affricate NonSibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulated "q" "χ"
Ejective Uvular (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "χ"
Ejective Pharyngeal Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "ʡ"
_ -> Maybe Text
forall a. Maybe a
Nothing
vowel :: Vowel -> Maybe IPA
vowel :: Vowel -> Maybe IPA
vowel = \case
Pure Close Front Unrounded -> Text -> Maybe IPA
mkJustIPA "i"
Pure Close Front Rounded -> Text -> Maybe IPA
mkJustIPA "y"
Pure Close Central Unrounded -> Text -> Maybe IPA
mkJustIPA "ɨ"
Pure Close Central Rounded -> Text -> Maybe IPA
mkJustIPA "ʉ"
Pure Close Back Unrounded -> Text -> Maybe IPA
mkJustIPA "ɯ"
Pure Close Back Rounded -> Text -> Maybe IPA
mkJustIPA "u"
Pure NearClose Front Unrounded -> Text -> Maybe IPA
mkJustIPA "ɪ"
Pure NearClose Front Rounded -> Text -> Maybe IPA
mkJustIPA "ʏ"
Pure NearClose Back Rounded -> Text -> Maybe IPA
mkJustIPA "ʊ"
Pure CloseMid Front Unrounded -> Text -> Maybe IPA
mkJustIPA "e"
Pure CloseMid Front Rounded -> Text -> Maybe IPA
mkJustIPA "ø"
Pure CloseMid Central Unrounded -> Text -> Maybe IPA
mkJustIPA "ɘ"
Pure CloseMid Central Rounded -> Text -> Maybe IPA
mkJustIPA "ɵ"
Pure CloseMid Back Unrounded -> Text -> Maybe IPA
mkJustIPA "ɤ"
Pure CloseMid Back Rounded -> Text -> Maybe IPA
mkJustIPA "o"
Pure Mid Front Unrounded -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Front Roundedness
Unrounded)
Pure Mid Front Rounded -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Front Roundedness
Rounded)
Pure Mid Central Unrounded -> Text -> Maybe IPA
mkJustIPA "ə"
Pure Mid Back Unrounded -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Back Roundedness
Unrounded)
Pure Mid Back Rounded -> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA
(Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Back Roundedness
Rounded)
Pure OpenMid Front Unrounded -> Text -> Maybe IPA
mkJustIPA "ɛ"
Pure OpenMid Front Rounded -> Text -> Maybe IPA
mkJustIPA "œ"
Pure OpenMid Central Unrounded -> Text -> Maybe IPA
mkJustIPA "ɜ"
Pure OpenMid Central Rounded -> Text -> Maybe IPA
mkJustIPA "ɞ"
Pure OpenMid Back Unrounded -> Text -> Maybe IPA
mkJustIPA "ʌ"
Pure OpenMid Back Rounded -> Text -> Maybe IPA
mkJustIPA "ɔ"
Pure NearOpen Front Unrounded -> Text -> Maybe IPA
mkJustIPA "æ"
Pure NearOpen Central Unrounded -> Text -> Maybe IPA
mkJustIPA "ɐ"
Pure Open Front Unrounded -> Text -> Maybe IPA
mkJustIPA "a"
Pure Open Front Rounded -> Text -> Maybe IPA
mkJustIPA "ɶ"
Pure Open Central Unrounded -> Text -> Maybe IPA
mkJustIPA "ä"
Pure Open Back Unrounded -> Text -> Maybe IPA
mkJustIPA "ɑ"
Pure Open Back Rounded -> Text -> Maybe IPA
mkJustIPA "ɒ"
Diphthongized v1 :: Vowel
v1@Pure {} v2 :: Vowel
v2@Pure {} -> IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
(<>) (IPA -> IPA -> IPA) -> Maybe IPA -> Maybe (IPA -> IPA)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA (Vowel -> Segment
Vowel Vowel
v1)
Maybe (IPA -> IPA) -> Maybe IPA -> Maybe IPA
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA (Vowel -> Segment
Vowel Vowel
v2)
Triphthongized v1 :: Vowel
v1@Pure {} v2 :: Vowel
v2@Pure {} v3 :: Vowel
v3@Pure {} -> do
IPA
first <- Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA (Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Vowel -> Segment
Vowel Vowel
v1
IPA
second <- Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA (Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Vowel -> Segment
Vowel Vowel
v2
IPA
third <- Segment -> Maybe IPA
forall a. ReprIPA a => a -> Maybe IPA
toIPA (Segment -> Maybe IPA) -> Segment -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ Vowel -> Segment
Vowel Vowel
v3
IPA -> Maybe IPA
forall (m :: * -> *) a. Monad m => a -> m a
return (IPA -> Maybe IPA) -> IPA -> Maybe IPA
forall a b. (a -> b) -> a -> b
$ IPA
first IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
<> IPA
second IPA -> IPA -> IPA
forall a. Semigroup a => a -> a -> a
<> IPA
third
_ -> Maybe IPA
forall a. Maybe a
Nothing
secondaryArticulation :: Segment -> Maybe IPA
secondaryArticulation :: Segment -> Maybe IPA
secondaryArticulation = \case
Consonant c :: Consonant
c -> case Consonant
c of
Pulmonic Voiced Bilabial Nasal -> Text -> Maybe IPA
mkJustIPA "\x1d50"
Pulmonic Voiced LabioDental Nasal -> Text -> Maybe IPA
mkJustIPA "\x1dac"
Pulmonic Voiced Alveolar Nasal -> Text -> Maybe IPA
mkJustIPA "\x207f"
Pulmonic Voiced Retroflex Nasal -> Text -> Maybe IPA
mkJustIPA "\x1daf"
Pulmonic Voiced Palatal Nasal -> Text -> Maybe IPA
mkJustIPA "\x1dae"
Pulmonic Voiced Velar Nasal -> Text -> Maybe IPA
mkJustIPA "\x1d51"
Pulmonic Voiced Uvular Nasal -> Text -> Maybe IPA
mkJustIPA "\x1db0"
Pulmonic Voiced Bilabial Plosive -> Text -> Maybe IPA
mkJustIPA "\x1d56"
Pulmonic Voiceless Bilabial Plosive -> Text -> Maybe IPA
mkJustIPA "\x1d47"
Pulmonic Voiceless Alveolar Plosive -> Text -> Maybe IPA
mkJustIPA "\x1d57"
Pulmonic Voiced Alveolar Plosive -> Text -> Maybe IPA
mkJustIPA "\x1d48"
Pulmonic Voiceless Palatal Plosive -> Text -> Maybe IPA
mkJustIPA "\x1d9c"
Pulmonic Voiced Palatal Plosive -> Text -> Maybe IPA
mkJustIPA "\x1da1"
Pulmonic Voiceless Velar Plosive -> Text -> Maybe IPA
mkJustIPA "\x1d4f"
Pulmonic Voiced Velar Plosive -> Text -> Maybe IPA
mkJustIPA "\x1da2"
Pulmonic Voiceless Glottal Plosive -> Text -> Maybe IPA
mkJustIPA "\x02c0"
Pulmonic Voiced Bilabial (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x1db2"
Pulmonic Voiceless Bilabial (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA "\x1d5d"
Pulmonic Voiced LabioDental (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA "\x1da0"
Pulmonic Voiceless LabioDental (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA "\x1d5b"
Pulmonic Voiceless Dental (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x1dbf"
Pulmonic Voiced Dental (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x1d9e"
Pulmonic Voiceless Alveolar (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "\x02e2"
Pulmonic Voiced Alveolar (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "\x1dbb"
Pulmonic Voiceless PostAlveolar (Fricative Sibilant) ->
Text -> Maybe IPA
mkJustIPA "\x1db4"
Pulmonic Voiced PostAlveolar (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "\x1dbe"
Pulmonic Voiceless Palatal (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "\x1d9d"
Pulmonic Voiced Palatal (Fricative Sibilant) -> Text -> Maybe IPA
mkJustIPA "\x1dbd"
Pulmonic Voiceless Palatal (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA "\x1d9c\x0327"
Pulmonic Voiced Palatal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x1da8"
Pulmonic Voiceless Velar (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x02e3"
Pulmonic Voiced Velar (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x02e0"
Pulmonic Voiceless Uvular (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x1d61"
Pulmonic Voiced Uvular (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x02b6"
Pulmonic Voiceless Glottal (Fricative NonSibilant) ->
Text -> Maybe IPA
mkJustIPA "\x02b0"
Pulmonic Voiced Glottal (Fricative NonSibilant) -> Text -> Maybe IPA
mkJustIPA "\x02b1"
Pulmonic Voiced LabioDental Approximant -> Text -> Maybe IPA
mkJustIPA "\x1db9"
Pulmonic Voiced Alveolar Approximant -> Text -> Maybe IPA
mkJustIPA "\x02b4"
Pulmonic Voiced Retroflex Approximant -> Text -> Maybe IPA
mkJustIPA "\x02b5"
Pulmonic Voiced Palatal Approximant -> Text -> Maybe IPA
mkJustIPA "\x02b2"
Pulmonic Voiceless Velar Approximant -> Text -> Maybe IPA
mkJustIPA "\xab69"
Pulmonic Voiced Velar Approximant -> Text -> Maybe IPA
mkJustIPA "\x1dad"
Pulmonic Voiced Alveolar Trill -> Text -> Maybe IPA
mkJustIPA "\x02b3"
_ -> Maybe IPA
forall a. Maybe a
Nothing
PureVowel Close Front Unrounded -> Text -> Maybe IPA
mkJustIPA "\x2071"
PureVowel Close Front Rounded -> Text -> Maybe IPA
mkJustIPA "\x02b8"
PureVowel Close Central Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1da4"
PureVowel Close Central Rounded -> Text -> Maybe IPA
mkJustIPA "\x1db6"
PureVowel Close Back Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d5a"
PureVowel Close Back Rounded -> Text -> Maybe IPA
mkJustIPA "\x1d58"
PureVowel NearClose Front Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1da6"
PureVowel NearClose Central Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1da7"
PureVowel NearClose Back Rounded -> Text -> Maybe IPA
mkJustIPA "\x1db7"
PureVowel Mid Central Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d4a"
PureVowel Mid Central Rounded -> Text -> Maybe IPA
mkJustIPA "\x1d4a"
PureVowel OpenMid Front Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d4b"
PureVowel OpenMid Front Rounded -> Text -> Maybe IPA
mkJustIPA "\xa7f9"
PureVowel OpenMid Central Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d9f"
PureVowel OpenMid Back Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1dba"
PureVowel OpenMid Back Rounded -> Text -> Maybe IPA
mkJustIPA "\x1d53"
PureVowel NearOpen Front Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d46"
PureVowel NearOpen Central Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d44"
PureVowel NearOpen Back Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d45"
PureVowel NearOpen Back Rounded -> Text -> Maybe IPA
mkJustIPA "\x1d9b"
PureVowel Open Front Unrounded -> Text -> Maybe IPA
mkJustIPA "\x1d43"
PureVowel Open Back Rounded -> Text -> Maybe IPA
mkJustIPA "\x1d44"
_ -> Maybe IPA
forall a. Maybe a
Nothing
mkXSampaOp :: ReprXSampa a => (b -> Maybe XSampa) -> a -> b -> Maybe XSampa
mkXSampaOp :: (b -> Maybe XSampa) -> a -> b -> Maybe XSampa
mkXSampaOp f :: b -> Maybe XSampa
f x :: a
x y :: b
y = XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
(<>) (XSampa -> XSampa -> XSampa)
-> Maybe XSampa -> Maybe (XSampa -> XSampa)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa a
x Maybe (XSampa -> XSampa) -> Maybe XSampa -> Maybe XSampa
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> b -> Maybe XSampa
f b
y
doubleArticulatedXSampa :: Text -> Text -> Text
doubleArticulatedXSampa :: Text -> Text -> Text
doubleArticulatedXSampa x :: Text
x y :: Text
y = Text
x Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "_" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
y
xSlash :: Text -> Text
xSlash :: Text -> Text
xSlash = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\\")
rhoticXSampa :: Text -> Text
rhoticXSampa :: Text -> Text
rhoticXSampa = (Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "`")
vowelXSampa :: Vowel -> Maybe XSampa
vowelXSampa :: Vowel -> Maybe XSampa
vowelXSampa = \case
Pure Close Front Unrounded -> Text -> Maybe XSampa
mkXSampa "i"
Pure Close Front Rounded -> Text -> Maybe XSampa
mkXSampa "y"
Pure Close Central Unrounded -> Text -> Maybe XSampa
mkXSampa "1"
Pure Close Central Rounded -> Text -> Maybe XSampa
mkXSampa "}"
Pure Close Back Unrounded -> Text -> Maybe XSampa
mkXSampa "M"
Pure Close Back Rounded -> Text -> Maybe XSampa
mkXSampa "u"
Pure NearClose Front Unrounded -> Text -> Maybe XSampa
mkXSampa "I"
Pure NearClose Front Rounded -> Text -> Maybe XSampa
mkXSampa "Y"
Pure NearClose Back Rounded -> Text -> Maybe XSampa
mkXSampa "U"
Pure CloseMid Front Unrounded -> Text -> Maybe XSampa
mkXSampa "e"
Pure CloseMid Front Rounded -> Text -> Maybe XSampa
mkXSampa "2"
Pure CloseMid Central Unrounded -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "@"
Pure CloseMid Central Rounded -> Text -> Maybe XSampa
mkXSampa "8"
Pure CloseMid Back Unrounded -> Text -> Maybe XSampa
mkXSampa "7"
Pure CloseMid Back Rounded -> Text -> Maybe XSampa
mkXSampa "o"
Pure Mid Front Unrounded -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Front Roundedness
Unrounded)
Pure Mid Front Rounded -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Front Roundedness
Rounded)
Pure Mid Central Unrounded -> Text -> Maybe XSampa
mkXSampa "@"
Pure Mid Back Unrounded -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Back Roundedness
Unrounded)
Pure Mid Back Rounded -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature SegmentalFeature
Lowered (Vowel -> Segment
Vowel (Vowel -> Segment) -> Vowel -> Segment
forall a b. (a -> b) -> a -> b
$ Height -> Backness -> Roundedness -> Vowel
Pure Height
CloseMid Backness
Back Roundedness
Unrounded)
Pure OpenMid Front Unrounded -> Text -> Maybe XSampa
mkXSampa "E"
Pure OpenMid Front Rounded -> Text -> Maybe XSampa
mkXSampa "9"
Pure OpenMid Central Unrounded -> Text -> Maybe XSampa
mkXSampa "3"
Pure OpenMid Central Rounded -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "3"
Pure OpenMid Back Unrounded -> Text -> Maybe XSampa
mkXSampa "V"
Pure OpenMid Back Rounded -> Text -> Maybe XSampa
mkXSampa "O"
Pure NearOpen Front Unrounded -> Text -> Maybe XSampa
mkXSampa "{"
Pure NearOpen Central Unrounded -> Text -> Maybe XSampa
mkXSampa "6"
Pure Open Front Unrounded -> Text -> Maybe XSampa
mkXSampa "a"
Pure Open Front Rounded -> Text -> Maybe XSampa
mkXSampa "&"
Pure Open Back Unrounded -> Text -> Maybe XSampa
mkXSampa "A"
Pure Open Back Rounded -> Text -> Maybe XSampa
mkXSampa "Q"
Diphthongized v1 :: Vowel
v1@Pure {} v2 :: Vowel
v2@Pure {} -> XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
(<>) (XSampa -> XSampa -> XSampa)
-> Maybe XSampa -> Maybe (XSampa -> XSampa)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa (Vowel -> Segment
Vowel Vowel
v1)
Maybe (XSampa -> XSampa) -> Maybe XSampa -> Maybe XSampa
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa (Vowel -> Segment
Vowel Vowel
v2)
Triphthongized v1 :: Vowel
v1@Pure {} v2 :: Vowel
v2@Pure {} v3 :: Vowel
v3@Pure {} -> do
XSampa
first <- Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa (Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Vowel -> Segment
Vowel Vowel
v1
XSampa
second <- Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa (Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Vowel -> Segment
Vowel Vowel
v2
XSampa
third <- Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa (Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Vowel -> Segment
Vowel Vowel
v3
XSampa -> Maybe XSampa
forall (m :: * -> *) a. Monad m => a -> m a
return (XSampa -> Maybe XSampa) -> XSampa -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ XSampa
first XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
<> XSampa
second XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
<> XSampa
third
_ -> Maybe XSampa
forall a. Maybe a
Nothing
consonantXSampa :: Consonant -> Maybe XSampa
consonantXSampa :: Consonant -> Maybe XSampa
consonantXSampa = \case
e :: Consonant
e@Ejective {} -> Consonant -> Maybe XSampa
ejectiveXSampa Consonant
e
i :: Consonant
i@Implosive {} -> Consonant -> Maybe XSampa
implosiveXSampa Consonant
i
Pulmonic Voiceless Bilabial Nasal -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Bilabial Manner
Nasal)
Pulmonic Voiced Bilabial Nasal -> Text -> Maybe XSampa
mkXSampa "m"
Pulmonic Voiced Bilabial Plosive -> Text -> Maybe XSampa
mkXSampa "b"
Pulmonic Voiceless Bilabial Plosive -> Text -> Maybe XSampa
mkXSampa "p"
Pulmonic Voiceless Bilabial (Fricative NonSibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "p"
Pulmonic Voiced Bilabial (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "B"
Pulmonic Voiced Bilabial Trill -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "B"
Pulmonic Voiced LabioDental Nasal -> Text -> Maybe XSampa
mkXSampa "F"
Pulmonic Voiceless LabioDental (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "f"
Pulmonic Voiced LabioDental (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "v"
Pulmonic Voiced LabioDental Approximant -> Text -> Maybe XSampa
mkXSampa "P"
Pulmonic Voiceless Dental (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "T"
Pulmonic Voiced Dental (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "D"
Pulmonic Voiceless Alveolar Nasal -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Alveolar Manner
Nasal)
Pulmonic Voiced Alveolar Nasal -> Text -> Maybe XSampa
mkXSampa "n"
Pulmonic Voiceless Alveolar Plosive -> Text -> Maybe XSampa
mkXSampa "t"
Pulmonic Voiced Alveolar Plosive -> Text -> Maybe XSampa
mkXSampa "d"
Pulmonic Voiceless Alveolar (Affricate Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "t" "s"
Pulmonic Voiced Alveolar (Affricate Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "d" "z"
Pulmonic Voiceless Alveolar (Fricative Sibilant) -> Text -> Maybe XSampa
mkXSampa "s"
Pulmonic Voiced Alveolar (Fricative Sibilant) -> Text -> Maybe XSampa
mkXSampa "z"
Pulmonic Voiced Alveolar Approximant -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "r"
Pulmonic Voiceless Alveolar Flap -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Alveolar Manner
Flap)
Pulmonic Voiced Alveolar Flap -> Text -> Maybe XSampa
mkXSampa "4"
Pulmonic Voiced Alveolar Trill -> Text -> Maybe XSampa
mkXSampa "r"
Pulmonic Voiceless Alveolar Trill -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Alveolar Manner
Trill)
Pulmonic Voiceless Alveolar LateralFricative -> Text -> Maybe XSampa
mkXSampa "K"
Pulmonic Voiced Alveolar LateralFricative -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "K"
Pulmonic Voiced Alveolar LateralApproximant -> Text -> Maybe XSampa
mkXSampa "l"
Pulmonic Voiceless PostAlveolar (Affricate Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "t" "S"
Pulmonic Voiced PostAlveolar (Affricate Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "d" "Z"
Pulmonic Voiceless PostAlveolar (Fricative Sibilant) -> Text -> Maybe XSampa
mkXSampa "S"
Pulmonic Voiced PostAlveolar (Fricative Sibilant) -> Text -> Maybe XSampa
mkXSampa "Z"
Pulmonic Voiceless Retroflex Nasal -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Retroflex Manner
Nasal)
Pulmonic Voiced Retroflex Nasal -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "n"
Pulmonic Voiceless Retroflex Plosive -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "t"
Pulmonic Voiced Retroflex Plosive -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "d"
Pulmonic Voiceless Retroflex (Affricate Sibilant) -> Text -> Maybe XSampa
mkXSampa
(Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ (Text -> Text -> Text
doubleArticulatedXSampa (Text -> Text -> Text) -> (Text -> Text) -> Text -> Text -> Text
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` Text -> Text
rhoticXSampa) "t" "s"
Pulmonic Voiced Retroflex (Affricate Sibilant) -> Text -> Maybe XSampa
mkXSampa
(Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ (Text -> Text -> Text
doubleArticulatedXSampa (Text -> Text -> Text) -> (Text -> Text) -> Text -> Text -> Text
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` Text -> Text
rhoticXSampa) "d" "z"
Pulmonic Voiceless Retroflex (Fricative Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "s"
Pulmonic Voiced Retroflex (Fricative Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "z"
Pulmonic Voiced Retroflex Approximant ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> (Text -> Text) -> Text -> Maybe XSampa
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
xSlash (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "r"
Pulmonic Voiceless Retroflex Flap -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Retroflex Manner
Nasal)
Pulmonic Voiced Retroflex Flap -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "r"
Pulmonic Voiceless Retroflex LateralApproximant -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Retroflex Manner
Nasal)
Pulmonic Voiced Retroflex LateralApproximant ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "l"
Pulmonic Voiced Palatal Nasal -> Text -> Maybe XSampa
mkXSampa "J"
Pulmonic Voiceless Palatal Plosive -> Text -> Maybe XSampa
mkXSampa "c"
Pulmonic Voiced Palatal Plosive -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "J"
Pulmonic Voiceless Palatal (Affricate Sibilant) -> Text -> Maybe XSampa
mkXSampa
(Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "t" (Text -> Text
xSlash "s")
Pulmonic Voiced Palatal (Affricate Sibilant) -> Text -> Maybe XSampa
mkXSampa
(Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "d" (Text -> Text
xSlash "z")
Pulmonic Voiceless Palatal (Fricative Sibilant) -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "s"
Pulmonic Voiced Palatal (Fricative Sibilant) -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "z"
Pulmonic Voiceless Palatal (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "C"
Pulmonic Voiced Palatal (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "j"
Pulmonic Voiced Palatal Approximant -> Text -> Maybe XSampa
mkXSampa "j"
Pulmonic Voiced Palatal LateralApproximant -> Text -> Maybe XSampa
mkXSampa "L"
Pulmonic Voiceless Velar Nasal -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Velar Manner
Nasal)
Pulmonic Voiced Velar Nasal -> Text -> Maybe XSampa
mkXSampa "N"
Pulmonic Voiceless Velar Plosive -> Text -> Maybe XSampa
mkXSampa "k"
Pulmonic Voiced Velar Plosive -> Text -> Maybe XSampa
mkXSampa "g"
Pulmonic Voiceless Velar (Affricate NonSibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "k" "x"
Pulmonic Voiced Velar (Affricate NonSibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "g" "G"
Pulmonic Voiceless Velar (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "x"
Pulmonic Voiced Velar (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "G"
Pulmonic Voiced Velar Approximant -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "m"
Pulmonic Voiced Velar LateralApproximant -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "L"
Pulmonic Voiced Uvular Nasal -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "N"
Pulmonic Voiceless Uvular Plosive -> Text -> Maybe XSampa
mkXSampa "q"
Pulmonic Voiced Uvular Plosive -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "G"
Pulmonic Voiceless Uvular (Affricate NonSibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "q" "X"
Pulmonic Voiced Uvular (Affricate NonSibilant) -> Text -> Maybe XSampa
mkXSampa
(Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa (Text -> Text
xSlash "G") "R"
Pulmonic Voiceless Uvular (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "X"
Pulmonic Voiced Uvular (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "R"
Pulmonic Voiceless Uvular Trill -> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Manner -> Segment
PulmonicConsonant Phonation
Voiced Place
Uvular Manner
Trill)
Pulmonic Voiced Uvular Trill -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "R"
Pulmonic Voiceless Pharyngeal (Fricative NonSibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "X"
Pulmonic Voiced Pharyngeal (Fricative NonSibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "?"
Pulmonic Voiceless Glottal Plosive -> Text -> Maybe XSampa
mkXSampa "?"
Pulmonic Voiceless Glottal (Affricate NonSibilant) -> Text -> Maybe XSampa
mkXSampa
(Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "?" (Text -> Text
xSlash "h")
Pulmonic Voiceless Glottal (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa "h"
Pulmonic Voiced Glottal (Fricative NonSibilant) -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "h"
Click Bilabial -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "O"
Click Dental -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "|"
Click Alveolar -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "!"
Click PostAlveolar -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "|" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
xSlash "|"
Click Palatal -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "="
DoublyArticulated Voiced Bilabial Alveolar Nasal ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "n" "m"
DoublyArticulated Voiceless Bilabial Alveolar Plosive ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "t" "p"
DoublyArticulated Voiced Bilabial Alveolar Plosive ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "d" "b"
DoublyArticulated Voiced Bilabial Velar Nasal ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "N" "m"
DoublyArticulated Voiceless Bilabial Velar Plosive ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "k" "p"
DoublyArticulated Voiced Bilabial Velar Plosive ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "g" "b"
DoublyArticulated Voiceless Bilabial Palatal (Fricative NonSibilant) ->
Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature
(Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Consonant -> Segment
Consonant (Phonation -> Place -> Place -> Manner -> Consonant
DoublyArticulated Phonation
Voiced Place
Bilabial Place
Palatal Manner
Approximant))
DoublyArticulated Voiced Bilabial Palatal Approximant -> Text -> Maybe XSampa
mkXSampa "H"
DoublyArticulated Voiceless Bilabial Velar (Fricative NonSibilant) ->
Text -> Maybe XSampa
mkXSampa "W"
DoublyArticulated Voiced Bilabial Velar Approximant -> Text -> Maybe XSampa
mkXSampa "w"
DoublyArticulated Voiceless PostAlveolar Velar (Fricative Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "x"
DoublyArticulated Voiceless LabioDental Velar (Fricative Sibilant) ->
Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "x"
_ -> Maybe XSampa
forall a. Maybe a
Nothing
ejectiveXSampa :: Consonant -> Maybe XSampa
ejectiveXSampa :: Consonant -> Maybe XSampa
ejectiveXSampa c :: Consonant
c = Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
(<>) (Text -> Text -> Text) -> Maybe Text -> Maybe (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Consonant -> Maybe Text
getEj Consonant
c Maybe (Text -> Text) -> Maybe Text -> Maybe Text
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
ej Maybe Text -> (Text -> Maybe XSampa) -> Maybe XSampa
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Maybe XSampa
mkXSampa
where
ej :: Text
ej = "_>"
getEj :: Consonant -> Maybe Text
getEj = \case
Ejective Bilabial Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "p"
Ejective Bilabial (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "p"
Ejective Dental (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "T"
Ejective Alveolar Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "t"
Ejective Alveolar (Affricate Sibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "t" "s"
Ejective Alveolar (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "s"
Ejective PostAlveolar (Affricate Sibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "t" "S"
Ejective PostAlveolar (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "S"
Ejective Retroflex Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "t"
Ejective Retroflex (Affricate Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just
(Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ (Text -> Text -> Text
doubleArticulatedXSampa (Text -> Text -> Text) -> (Text -> Text) -> Text -> Text -> Text
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` Text -> Text
rhoticXSampa) "t" "s"
Ejective Retroflex (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "s"
Ejective Palatal Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "c"
Ejective Palatal (Affricate Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just
(Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "t" (Text -> Text
xSlash "s")
Ejective Palatal (Fricative Sibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "s"
Ejective Velar Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "k"
Ejective Velar (Affricate NonSibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "k" "x"
Ejective Velar (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "x"
Ejective Uvular Plosive -> Text -> Maybe Text
forall a. a -> Maybe a
Just "q"
Ejective Uvular (Affricate NonSibilant) ->
Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
doubleArticulatedXSampa "q" "X"
Ejective Uvular (Fricative NonSibilant) -> Text -> Maybe Text
forall a. a -> Maybe a
Just "X"
_ -> Maybe Text
forall a. Maybe a
Nothing
implosiveXSampa :: Consonant -> Maybe XSampa
implosiveXSampa :: Consonant -> Maybe XSampa
implosiveXSampa (Implosive Voiceless place :: Place
place) = Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Segment -> Maybe XSampa) -> Segment -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SegmentalFeature -> Segment -> Segment
WithSegmentalFeature (Phonation -> SegmentalFeature
Voicing Phonation
Voiceless)
(Phonation -> Place -> Segment
ImplosiveConsonant Phonation
Voiced Place
place)
implosiveXSampa c :: Consonant
c = Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
(<>) (Text -> Text -> Text) -> Maybe Text -> Maybe (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Consonant -> Maybe Text
getImpl Consonant
c Maybe (Text -> Text) -> Maybe Text -> Maybe Text
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
impl Maybe Text -> (Text -> Maybe XSampa) -> Maybe XSampa
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Maybe XSampa
mkXSampa
where
impl :: Text
impl = "_<"
getImpl :: Consonant -> Maybe Text
getImpl = \case
Implosive Voiced Bilabial -> Text -> Maybe Text
forall a. a -> Maybe a
Just "b"
Implosive Voiced Alveolar -> Text -> Maybe Text
forall a. a -> Maybe a
Just "d"
Implosive Voiced Retroflex -> Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
rhoticXSampa "d"
Implosive Voiced Palatal -> Text -> Maybe Text
forall a. a -> Maybe a
Just "f"
Implosive Voiced Velar -> Text -> Maybe Text
forall a. a -> Maybe a
Just "g"
Implosive Voiced Uvular -> Text -> Maybe Text
forall a. a -> Maybe a
Just "G"
_ -> Maybe Text
forall a. Maybe a
Nothing
withSegmentalFeatureXSampa :: Segment -> SegmentalFeature -> Maybe XSampa
withSegmentalFeatureXSampa :: Segment -> SegmentalFeature -> Maybe XSampa
withSegmentalFeatureXSampa s :: Segment
s = \case
Voicing v :: Phonation
v -> (Phonation -> Maybe XSampa) -> Segment -> Phonation -> Maybe XSampa
forall a b.
ReprXSampa a =>
(b -> Maybe XSampa) -> a -> b -> Maybe XSampa
mkXSampaOp Phonation -> Maybe XSampa
xSampaVoicing Segment
s Phonation
v
where
xSampaVoicing :: Phonation -> Maybe XSampa
xSampaVoicing = \case
Voiceless -> Text -> Maybe XSampa
mkXSampa "_0"
Voiced -> Text -> Maybe XSampa
mkXSampa "_v"
Length l :: Length
l -> (Length -> Maybe XSampa) -> Segment -> Length -> Maybe XSampa
forall a b.
ReprXSampa a =>
(b -> Maybe XSampa) -> a -> b -> Maybe XSampa
mkXSampaOp Length -> Maybe XSampa
xSampaLength Segment
s Length
l
where
xSampaLength :: Length -> Maybe XSampa
xSampaLength = \case
OverLong -> Text -> Maybe XSampa
mkXSampa "::"
Long -> Text -> Maybe XSampa
mkXSampa ":"
HalfLong -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash ":"
Short -> Text -> Maybe XSampa
mkXSampa Text
forall a. Monoid a => a
mempty
ExtraShort -> Text -> Maybe XSampa
mkXSampa "_X"
SecondaryArticulation _ -> Maybe XSampa
forall a. Maybe a
Nothing
feature :: SegmentalFeature
feature -> XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
(<>) (XSampa -> XSampa -> XSampa)
-> Maybe XSampa -> Maybe (XSampa -> XSampa)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Segment -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa Segment
s Maybe (XSampa -> XSampa) -> Maybe XSampa -> Maybe XSampa
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> case SegmentalFeature
feature of
Aspirated -> Text -> Maybe XSampa
mkXSampa "_h"
MoreRounded -> Text -> Maybe XSampa
mkXSampa "_O"
LessRounded -> Text -> Maybe XSampa
mkXSampa "_c"
Advanced -> Text -> Maybe XSampa
mkXSampa "_+"
Retracted -> Text -> Maybe XSampa
mkXSampa "_-"
Centralized -> Text -> Maybe XSampa
mkXSampa "_\""
MidCentralized -> Text -> Maybe XSampa
mkXSampa "_x"
Syllabic -> Text -> Maybe XSampa
mkXSampa "="
NonSyllabic -> Text -> Maybe XSampa
mkXSampa "_^"
Rhotacized -> Text -> Maybe XSampa
mkXSampa "`"
BreathyVoice -> Text -> Maybe XSampa
mkXSampa "_t"
CreakyVoice -> Text -> Maybe XSampa
mkXSampa "_k"
Labialized -> Text -> Maybe XSampa
mkXSampa "_w"
Palatalized -> Text -> Maybe XSampa
mkXSampa "'"
Velarized -> Text -> Maybe XSampa
mkXSampa "_G"
Pharyngealized -> Text -> Maybe XSampa
mkXSampa (Text -> Maybe XSampa) -> Text -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ Text -> Text
xSlash "_?"
Raised -> Text -> Maybe XSampa
mkXSampa "_r"
Lowered -> Text -> Maybe XSampa
mkXSampa "_o"
AdvancedTongueRoot -> Text -> Maybe XSampa
mkXSampa "_A"
RetractedTongueRoot -> Text -> Maybe XSampa
mkXSampa "_q"
Dentalized -> Text -> Maybe XSampa
mkXSampa "_d"
Apical -> Text -> Maybe XSampa
mkXSampa "_a"
Laminal -> Text -> Maybe XSampa
mkXSampa "_m"
Nasalized -> Text -> Maybe XSampa
mkXSampa "~"
LateralRelease -> Text -> Maybe XSampa
mkXSampa "_l"
NoAudibleRelease -> Text -> Maybe XSampa
mkXSampa "_}"
_ -> Maybe XSampa
forall a. Maybe a
Nothing
withSuprasegmentalFeatureXSampa
:: MultiSegment t => Syllable t -> SuprasegmentalFeature -> Maybe XSampa
withSuprasegmentalFeatureXSampa :: Syllable t -> SuprasegmentalFeature -> Maybe XSampa
withSuprasegmentalFeatureXSampa s :: Syllable t
s = \case
LevelLexicalTone tone :: LevelTone
tone -> (LevelTone -> Maybe XSampa)
-> Syllable t -> LevelTone -> Maybe XSampa
forall a b.
ReprXSampa a =>
(b -> Maybe XSampa) -> a -> b -> Maybe XSampa
mkXSampaOp LevelTone -> Maybe XSampa
xsampaTone Syllable t
s LevelTone
tone
where
xsampaTone :: LevelTone -> Maybe XSampa
xsampaTone = \case
ExtraHighTone -> Text -> Maybe XSampa
mkXSampa "_T"
HighTone -> Text -> Maybe XSampa
mkXSampa "_H"
MidTone -> Text -> Maybe XSampa
mkXSampa "_M"
LowTone -> Text -> Maybe XSampa
mkXSampa "_L"
ExtraLowTone -> Text -> Maybe XSampa
mkXSampa "_B"
DownStep -> Text -> Maybe XSampa
mkXSampa "!"
UpStep -> Text -> Maybe XSampa
mkXSampa "^"
LevelLexicalToneDiacritic tone :: LevelTone
tone -> Syllable t -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Syllable t -> Maybe XSampa) -> Syllable t -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature (LevelTone -> SuprasegmentalFeature
LevelLexicalTone LevelTone
tone) Syllable t
s
LexicalToneContour tone :: ToneContour
tone -> (ToneContour -> Maybe XSampa)
-> Syllable t -> ToneContour -> Maybe XSampa
forall a b.
ReprXSampa a =>
(b -> Maybe XSampa) -> a -> b -> Maybe XSampa
mkXSampaOp ToneContour -> Maybe XSampa
xsampaToneContour Syllable t
s ToneContour
tone
where
xsampaToneContour :: ToneContour -> Maybe XSampa
xsampaToneContour = \case
Rising -> Text -> Maybe XSampa
mkXSampa "_R"
Falling -> Text -> Maybe XSampa
mkXSampa "_F"
HighRising -> Text -> Maybe XSampa
mkXSampa "_H_T"
LowRising -> Text -> Maybe XSampa
mkXSampa "_B_L"
HighFalling -> Text -> Maybe XSampa
mkXSampa "_H_F"
LowFalling -> Text -> Maybe XSampa
mkXSampa "_L_B"
RisingFalling -> Text -> Maybe XSampa
mkXSampa "_R_F"
FallingRising -> Text -> Maybe XSampa
mkXSampa "_F_R"
GlobalRise -> Text -> Maybe XSampa
mkXSampa "<R>"
GlobalFall -> Text -> Maybe XSampa
mkXSampa "<F>"
LexicalToneContourDiacritic tone :: ToneContour
tone -> Syllable t -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa
(Syllable t -> Maybe XSampa) -> Syllable t -> Maybe XSampa
forall a b. (a -> b) -> a -> b
$ SuprasegmentalFeature -> Syllable t -> Syllable t
forall (t :: * -> *).
SuprasegmentalFeature -> Syllable t -> Syllable t
WithSuprasegmentalFeature (ToneContour -> SuprasegmentalFeature
LexicalToneContour ToneContour
tone) Syllable t
s
Stress stress :: Stress
stress -> (Stress -> Maybe XSampa) -> Syllable t -> Stress -> Maybe XSampa
forall a b.
ReprXSampa a =>
(b -> Maybe XSampa) -> a -> b -> Maybe XSampa
mkXSampaOp Stress -> Maybe XSampa
xsampaStress Syllable t
s Stress
stress
where
xsampaStress :: Stress -> Maybe XSampa
xsampaStress Primary = Text -> Maybe XSampa
mkXSampa "\""
xsampaStress Secondary = Text -> Maybe XSampa
mkXSampa "%"
Break -> XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
(<>) (XSampa -> XSampa -> XSampa)
-> Maybe XSampa -> Maybe (XSampa -> XSampa)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Syllable t -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa Syllable t
s Maybe (XSampa -> XSampa) -> Maybe XSampa -> Maybe XSampa
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe XSampa
mkXSampa "."
Linking -> XSampa -> XSampa -> XSampa
forall a. Semigroup a => a -> a -> a
(<>) (XSampa -> XSampa -> XSampa)
-> Maybe XSampa -> Maybe (XSampa -> XSampa)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Syllable t -> Maybe XSampa
forall a. ReprXSampa a => a -> Maybe XSampa
toXSampa Syllable t
s Maybe (XSampa -> XSampa) -> Maybe XSampa -> Maybe XSampa
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Maybe XSampa
mkXSampa (Text -> Text
xSlash "-")
_ -> Maybe XSampa
forall a. Maybe a
Nothing