module Data.Owoify.Internal.Data.Mappings
  ( mapBracketsToStartrails
  , mapConsonantRToConsonantW
  , mapDeadToDed
  , mapEwToUwu
  , mapFiToFwi
  , mapFucToFwuc
  , mapHahaToHeheXd
  , mapHeyToHay
  , mapLeToWal
  , mapLlToWw
  , mapLOrROToWo
  , mapLyToWy
  , mapMeToMwe
  , mapMomToMwom
  , mapNrToNw
  , mapNVowelTToNd
  , mapNVowelToNy
  , mapOldToOwld
  , mapOlToOwl
  , mapOToOwo
  , mapOveToUv
  , mapOverToOwor
  , mapPeriodCommaExclamationSemicolonToKaomojis
  , mapPleToPwe
  , mapPoiToPwoi
  , mapReadToWead
  , mapROrLToW
  , mapRyToWwy
  , mapSpecificConsonantsLeToLetterAndWal
  , mapSpecificConsonantsOToLetterAndWo
  , mapThatToDat
  , mapThToF
  , mapTheToTeh
  , mapTimeToTim
  , mapVerToWer
  , mapVeToWe
  , mapVOrWLeToWal
  , mapVowelOrRExceptOLToWl
  , mapWorseToWose
  , mapYouToU
  )
  where

import Prelude

import Data.Owoify.Internal.Entity.Word (innerReplace, innerReplaceWithFuncMultiple, innerReplaceWithFuncSingle, InnerWord)
import Data.Text.Lazy (Text, pack, toUpper)
import Text.RE.PCRE.Text.Lazy (compileRegex, RE)
import System.Random.Stateful (applyAtomicGen, uniformR)
import System.Random (getStdRandom, Random (randomR))

compileDefaultOptionRegex :: String -> IO RE
compileDefaultOptionRegex :: String -> IO RE
compileDefaultOptionRegex = String -> IO RE
forall (m :: * -> *).
(Functor m, Monad m, MonadFail m) =>
String -> m RE
compileRegex

oToOwo :: IO RE
oToOwo :: IO RE
oToOwo = String -> IO RE
compileDefaultOptionRegex String
"o"

ewToUwu :: IO RE
ewToUwu :: IO RE
ewToUwu = String -> IO RE
compileDefaultOptionRegex String
"ew"

heyToHay :: IO RE
heyToHay :: IO RE
heyToHay = String -> IO RE
compileDefaultOptionRegex String
"([Hh])ey"

deadToDedUpper :: IO RE
deadToDedUpper :: IO RE
deadToDedUpper = String -> IO RE
compileDefaultOptionRegex String
"Dead"

deadToDedLower :: IO RE
deadToDedLower :: IO RE
deadToDedLower = String -> IO RE
compileDefaultOptionRegex String
"dead"

nVowelTToNd :: IO RE
nVowelTToNd :: IO RE
nVowelTToNd = String -> IO RE
compileDefaultOptionRegex String
"n[aeiou]*t"

readToWeadUpper :: IO RE
readToWeadUpper :: IO RE
readToWeadUpper = String -> IO RE
compileDefaultOptionRegex String
"Read"

readToWeadLower :: IO RE
readToWeadLower :: IO RE
readToWeadLower = String -> IO RE
compileDefaultOptionRegex String
"read"

bracketsToStartrailsFore :: IO RE
bracketsToStartrailsFore :: IO RE
bracketsToStartrailsFore = String -> IO RE
compileDefaultOptionRegex String
"[({<]"

bracketsToStartrailsRear :: IO RE
bracketsToStartrailsRear :: IO RE
bracketsToStartrailsRear = String -> IO RE
compileDefaultOptionRegex String
"[)}>]"

periodCommaExclamationSemicolonToKaomojisFirst :: IO RE
periodCommaExclamationSemicolonToKaomojisFirst :: IO RE
periodCommaExclamationSemicolonToKaomojisFirst = String -> IO RE
compileDefaultOptionRegex String
"[.,](?![0-9])"

periodCommaExclamationSemicolonToKaomojisSecond :: IO RE
periodCommaExclamationSemicolonToKaomojisSecond :: IO RE
periodCommaExclamationSemicolonToKaomojisSecond = String -> IO RE
compileDefaultOptionRegex String
"[!;]+"

thatToDatUpper :: IO RE
thatToDatUpper :: IO RE
thatToDatUpper = String -> IO RE
compileDefaultOptionRegex String
"That"

thatToDatLower :: IO RE
thatToDatLower :: IO RE
thatToDatLower = String -> IO RE
compileDefaultOptionRegex String
"that"

thToFUpper :: IO RE
thToFUpper :: IO RE
thToFUpper = String -> IO RE
compileDefaultOptionRegex String
"TH(?!E)"

thToFLower :: IO RE
thToFLower :: IO RE
thToFLower = String -> IO RE
compileDefaultOptionRegex String
"[Tt]h(?![Ee])"

leToWal :: IO RE
leToWal :: IO RE
leToWal = String -> IO RE
compileDefaultOptionRegex String
"le$"

veToWeUpper :: IO RE
veToWeUpper :: IO RE
veToWeUpper = String -> IO RE
compileDefaultOptionRegex String
"Ve"

veToWeLower :: IO RE
veToWeLower :: IO RE
veToWeLower = String -> IO RE
compileDefaultOptionRegex String
"ve"

ryToWwy :: IO RE
ryToWwy :: IO RE
ryToWwy = String -> IO RE
compileDefaultOptionRegex String
"ry"

rOrLToWUpper :: IO RE
rOrLToWUpper :: IO RE
rOrLToWUpper = String -> IO RE
compileDefaultOptionRegex String
"(?:R|L)"

rOrLToWLower :: IO RE
rOrLToWLower :: IO RE
rOrLToWLower = String -> IO RE
compileDefaultOptionRegex String
"(?:r|l)"

llToWw :: IO RE
llToWw :: IO RE
llToWw = String -> IO RE
compileDefaultOptionRegex String
"ll"

vowelOrRExceptOLToWlUpper :: IO RE
vowelOrRExceptOLToWlUpper :: IO RE
vowelOrRExceptOLToWlUpper = String -> IO RE
compileDefaultOptionRegex String
"[AEIUR]([lL])$"

vowelOrRExceptOLToWlLower :: IO RE
vowelOrRExceptOLToWlLower :: IO RE
vowelOrRExceptOLToWlLower = String -> IO RE
compileDefaultOptionRegex String
"[aeiur]l$"

oldToOwldUpper :: IO RE
oldToOwldUpper :: IO RE
oldToOwldUpper = String -> IO RE
compileDefaultOptionRegex String
"OLD"

oldToOwldLower :: IO RE
oldToOwldLower :: IO RE
oldToOwldLower = String -> IO RE
compileDefaultOptionRegex String
"([Oo])ld"

olToOwlUpper :: IO RE
olToOwlUpper :: IO RE
olToOwlUpper = String -> IO RE
compileDefaultOptionRegex String
"OL"

olToOwlLower :: IO RE
olToOwlLower :: IO RE
olToOwlLower = String -> IO RE
compileDefaultOptionRegex String
"([Oo])l"

lOrROToWoUpper :: IO RE
lOrROToWoUpper :: IO RE
lOrROToWoUpper = String -> IO RE
compileDefaultOptionRegex String
"[LR]([oO])"

lOrROToWoLower :: IO RE
lOrROToWoLower :: IO RE
lOrROToWoLower = String -> IO RE
compileDefaultOptionRegex String
"[lr]o"

specificConsonantsOToLetterAndWoUpper :: IO RE
specificConsonantsOToLetterAndWoUpper :: IO RE
specificConsonantsOToLetterAndWoUpper = String -> IO RE
compileDefaultOptionRegex String
"([BCDFGHJKMNPQSTXYZ])([oO])"

specificConsonantsOToLetterAndWoLower :: IO RE
specificConsonantsOToLetterAndWoLower :: IO RE
specificConsonantsOToLetterAndWoLower = String -> IO RE
compileDefaultOptionRegex String
"([bcdfghjkmnpqstxyz])o"

vOrWLeToWal :: IO RE
vOrWLeToWal :: IO RE
vOrWLeToWal = String -> IO RE
compileDefaultOptionRegex String
"[vw]le"

fiToFwiUpper :: IO RE
fiToFwiUpper :: IO RE
fiToFwiUpper = String -> IO RE
compileDefaultOptionRegex String
"FI"

fiToFwiLower :: IO RE
fiToFwiLower :: IO RE
fiToFwiLower = String -> IO RE
compileDefaultOptionRegex String
"([Ff])i"

verToWer :: IO RE
verToWer :: IO RE
verToWer = String -> IO RE
compileDefaultOptionRegex String
"([Vv])er"

poiToPwoi :: IO RE
poiToPwoi :: IO RE
poiToPwoi = String -> IO RE
compileDefaultOptionRegex String
"([Pp])oi"

specificConsonantsLeToLetterAndWal :: IO RE
specificConsonantsLeToLetterAndWal :: IO RE
specificConsonantsLeToLetterAndWal = String -> IO RE
compileDefaultOptionRegex String
"([DdFfGgHhJjPpQqRrSsTtXxYyZz])le$"

consonantRToConsonantW :: IO RE
consonantRToConsonantW :: IO RE
consonantRToConsonantW = String -> IO RE
compileDefaultOptionRegex String
"([BbCcDdFfGgKkPpQqSsTtWwXxZz])r"

lyToWyUpper :: IO RE
lyToWyUpper :: IO RE
lyToWyUpper = String -> IO RE
compileDefaultOptionRegex String
"Ly"

lyToWyLower :: IO RE
lyToWyLower :: IO RE
lyToWyLower = String -> IO RE
compileDefaultOptionRegex String
"ly"

pleToPwe :: IO RE
pleToPwe :: IO RE
pleToPwe = String -> IO RE
compileDefaultOptionRegex String
"([Pp])le"

nrToNwUpper :: IO RE
nrToNwUpper :: IO RE
nrToNwUpper = String -> IO RE
compileDefaultOptionRegex String
"NR"

nrToNwLower :: IO RE
nrToNwLower :: IO RE
nrToNwLower = String -> IO RE
compileDefaultOptionRegex String
"nr"

funcToFwuc :: IO RE
funcToFwuc :: IO RE
funcToFwuc = String -> IO RE
compileDefaultOptionRegex String
"([Ff])uc"

momToMwom :: IO RE
momToMwom :: IO RE
momToMwom = String -> IO RE
compileDefaultOptionRegex String
"([Mm])om"

meToMwe :: IO RE
meToMwe :: IO RE
meToMwe = String -> IO RE
compileDefaultOptionRegex String
"([Mm])e"

nVowelToNyFirst :: IO RE
nVowelToNyFirst :: IO RE
nVowelToNyFirst = String -> IO RE
compileDefaultOptionRegex String
"n([aeiou])"

nVowelToNySecond :: IO RE
nVowelToNySecond :: IO RE
nVowelToNySecond = String -> IO RE
compileDefaultOptionRegex String
"N([aeiou])"

nVowelToNyThird :: IO RE
nVowelToNyThird :: IO RE
nVowelToNyThird = String -> IO RE
compileDefaultOptionRegex String
"N([AEIOU])"

oveToUvUpper :: IO RE
oveToUvUpper :: IO RE
oveToUvUpper = String -> IO RE
compileDefaultOptionRegex String
"OVE"

oveToUvLower :: IO RE
oveToUvLower :: IO RE
oveToUvLower = String -> IO RE
compileDefaultOptionRegex String
"ove"

hahaToHeheXd :: IO RE
hahaToHeheXd :: IO RE
hahaToHeheXd = String -> IO RE
compileDefaultOptionRegex String
"\\b(ha|hah|heh|hehe)+\\b"

theToTeh :: IO RE
theToTeh :: IO RE
theToTeh = String -> IO RE
compileDefaultOptionRegex String
"\\b([Tt])he\\b"

youToUUpper :: IO RE
youToUUpper :: IO RE
youToUUpper = String -> IO RE
compileDefaultOptionRegex String
"\\bYou\\b"

youToULower :: IO RE
youToULower :: IO RE
youToULower = String -> IO RE
compileDefaultOptionRegex String
"\\byou\\b"

timeToTim :: IO RE
timeToTim :: IO RE
timeToTim = String -> IO RE
compileDefaultOptionRegex String
"\\b([Tt])ime\\b"

overToOwor :: IO RE
overToOwor :: IO RE
overToOwor = String -> IO RE
compileDefaultOptionRegex String
"([Oo])ver"

worseToWose :: IO RE
worseToWose :: IO RE
worseToWose = String -> IO RE
compileDefaultOptionRegex String
"([Ww])orse"

faces :: [Text]
faces :: [Text]
faces = String -> Text
pack (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
  [ String
"(・`ω´・)"
  , String
";;w;;"
  , String
"owo"
  , String
"UwU"
  , String
">w<"
  , String
"^w^"
  , String
"(* ^ ω ^)"
  , String
"(⌒ω⌒)"
  , String
"ヽ(*・ω・)ノ"
  , String
"(o´∀`o)"
  ,String
"(o・ω・o)"
  , String
"\(^▽^)/"
  , String
"(*^ω^)"
  , String
"(◕‿◕✿)"
  , String
"(◕ᴥ◕)"
  , String
"ʕ•ᴥ•ʔ"
  , String
"ʕ→ᴥ←ʔ"
  , String
"(*^.^*)"
  , String
"(。♥‿♥。)"
  , String
"OwO"
  , String
"uwu"
  , String
"uvu"
  , String
"UvU"
  , String
"(* ̄з ̄)"
  , String
"(つ✧ω✧)つ"
  , String
"(/ =ω=)/"
  , String
"(╯°□°)╯︵ ┻━┻"
  ,String
"┬─┬ ノ( ゜-゜ノ)"
  , String
"¯\\_(ツ)_/¯"
  ]

mapOToOwo :: InnerWord -> IO InnerWord
mapOToOwo :: InnerWord -> IO InnerWord
mapOToOwo InnerWord
word = do
  Int
n <- (StdGen -> (Int, StdGen)) -> IO Int
forall (m :: * -> *) a. MonadIO m => (StdGen -> (a, StdGen)) -> m a
getStdRandom ((Int, Int) -> StdGen -> (Int, StdGen)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (Int
0, Int
1)) :: IO Int
  let emoji :: Text
emoji = if Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
0 then String -> Text
pack String
"owo" else String -> Text
pack String
"o"
  RE
re <- IO RE
oToOwo
  InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re Text
emoji Bool
False

mapEwToUwu :: InnerWord -> IO InnerWord
mapEwToUwu :: InnerWord -> IO InnerWord
mapEwToUwu InnerWord
word = IO RE
ewToUwu IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"uwu") Bool
False

mapHeyToHay :: InnerWord -> IO InnerWord
mapHeyToHay :: InnerWord -> IO InnerWord
mapHeyToHay InnerWord
word = IO RE
heyToHay IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1ay") Bool
False

mapDeadToDed :: InnerWord -> IO InnerWord
mapDeadToDed :: InnerWord -> IO InnerWord
mapDeadToDed InnerWord
word = do
  InnerWord
w <- IO RE
deadToDedUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"Ded") Bool
False
  IO RE
deadToDedLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"ded") Bool
False

mapNVowelTToNd :: InnerWord -> IO InnerWord
mapNVowelTToNd :: InnerWord -> IO InnerWord
mapNVowelTToNd InnerWord
word = IO RE
nVowelTToNd IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"nd") Bool
False

mapReadToWead :: InnerWord -> IO InnerWord
mapReadToWead :: InnerWord -> IO InnerWord
mapReadToWead InnerWord
word = do
  InnerWord
w <- IO RE
readToWeadUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"Wead") Bool
False
  IO RE
readToWeadLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"wead") Bool
False

mapBracketsToStartrails :: InnerWord -> IO InnerWord
mapBracketsToStartrails :: InnerWord -> IO InnerWord
mapBracketsToStartrails InnerWord
word = do
  InnerWord
w <- IO RE
bracketsToStartrailsFore IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"。・:*:・゚★,。・:*:・゚☆") Bool
False
  IO RE
bracketsToStartrailsRear IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"☆゚・:*:・。,★゚・:*:・。") Bool
False

mapPeriodCommaExclamationSemicolonToKaomojis :: InnerWord -> IO InnerWord
mapPeriodCommaExclamationSemicolonToKaomojis :: InnerWord -> IO InnerWord
mapPeriodCommaExclamationSemicolonToKaomojis InnerWord
word = do
  Int
n <- (StdGen -> (Int, StdGen)) -> IO Int
forall (m :: * -> *) a. MonadIO m => (StdGen -> (a, StdGen)) -> m a
getStdRandom ((Int, Int) -> StdGen -> (Int, StdGen)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (Int
0, [Text] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Text]
faces Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)) :: IO Int
  let face :: Text
face = [Text]
faces [Text] -> Int -> Text
forall a. [a] -> Int -> a
!! Int
n
  let w :: IO InnerWord
w = IO RE
periodCommaExclamationSemicolonToKaomojisFirst IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> (() -> Text) -> Bool -> InnerWord
innerReplaceWithFuncSingle InnerWord
word RE
re (Text -> () -> Text
forall a b. a -> b -> a
const Text
face) Bool
False
  Int
n' <- (StdGen -> (Int, StdGen)) -> IO Int
forall (m :: * -> *) a. MonadIO m => (StdGen -> (a, StdGen)) -> m a
getStdRandom ((Int, Int) -> StdGen -> (Int, StdGen)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (Int
0, [Text] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Text]
faces Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)) :: IO Int
  let face' :: Text
face' = [Text]
faces [Text] -> Int -> Text
forall a. [a] -> Int -> a
!! Int
n'
  let re' :: IO RE
re' = IO RE
periodCommaExclamationSemicolonToKaomojisSecond
  (\RE
r InnerWord
w' ->
    InnerWord -> RE -> (() -> Text) -> Bool -> InnerWord
innerReplaceWithFuncSingle InnerWord
w' RE
r (Text -> () -> Text
forall a b. a -> b -> a
const Text
face') Bool
False)
    (RE -> InnerWord -> InnerWord)
-> IO RE -> IO (InnerWord -> InnerWord)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO RE
re'
    IO (InnerWord -> InnerWord) -> IO InnerWord -> IO InnerWord
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IO InnerWord
w

mapThatToDat :: InnerWord -> IO InnerWord
mapThatToDat :: InnerWord -> IO InnerWord
mapThatToDat InnerWord
word = do
  InnerWord
w <- IO RE
thatToDatLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"dat") Bool
False
  IO RE
thatToDatUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"Dat") Bool
False

mapThToF :: InnerWord -> IO InnerWord
mapThToF :: InnerWord -> IO InnerWord
mapThToF InnerWord
word = do
  InnerWord
w <- IO RE
thToFLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"f") Bool
False
  IO RE
thToFUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"F") Bool
False

mapLeToWal :: InnerWord -> IO InnerWord
mapLeToWal :: InnerWord -> IO InnerWord
mapLeToWal InnerWord
word = IO RE
leToWal IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"wal") Bool
False

mapVeToWe :: InnerWord -> IO InnerWord
mapVeToWe :: InnerWord -> IO InnerWord
mapVeToWe InnerWord
word = do
  InnerWord
w <- IO RE
veToWeLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"we") Bool
False
  IO RE
veToWeUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"We") Bool
False

mapRyToWwy :: InnerWord -> IO InnerWord
mapRyToWwy :: InnerWord -> IO InnerWord
mapRyToWwy InnerWord
word = IO RE
ryToWwy IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"wwy") Bool
False

mapROrLToW :: InnerWord -> IO InnerWord
mapROrLToW :: InnerWord -> IO InnerWord
mapROrLToW InnerWord
word = do
  InnerWord
w <- IO RE
rOrLToWLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"w") Bool
False
  IO RE
rOrLToWUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"W") Bool
False

mapLlToWw :: InnerWord -> IO InnerWord
mapLlToWw :: InnerWord -> IO InnerWord
mapLlToWw InnerWord
word = IO RE
llToWw IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"ww") Bool
False

mapVowelOrRExceptOLToWl :: InnerWord -> IO InnerWord
mapVowelOrRExceptOLToWl :: InnerWord -> IO InnerWord
mapVowelOrRExceptOLToWl InnerWord
word = do
  InnerWord
w <- IO RE
vowelOrRExceptOLToWlLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"wl") Bool
False
  IO RE
vowelOrRExceptOLToWlUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"W$1") Bool
False

mapOldToOwld :: InnerWord -> IO InnerWord
mapOldToOwld :: InnerWord -> IO InnerWord
mapOldToOwld InnerWord
word = do
  InnerWord
w <- IO RE
oldToOwldLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wld") Bool
False
  IO RE
oldToOwldUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"OWLD") Bool
False

mapOlToOwl :: InnerWord -> IO InnerWord
mapOlToOwl :: InnerWord -> IO InnerWord
mapOlToOwl InnerWord
word = do
  InnerWord
w <- IO RE
olToOwlLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wl") Bool
False
  IO RE
olToOwlUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"OWL") Bool
False

mapLOrROToWo :: InnerWord -> IO InnerWord
mapLOrROToWo :: InnerWord -> IO InnerWord
mapLOrROToWo InnerWord
word = do
  InnerWord
w <- IO RE
lOrROToWoLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"wo") Bool
False
  IO RE
lOrROToWoUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"W$1") Bool
False

mapSpecificConsonantsOToLetterAndWo :: InnerWord -> IO InnerWord
mapSpecificConsonantsOToLetterAndWo :: InnerWord -> IO InnerWord
mapSpecificConsonantsOToLetterAndWo InnerWord
word = do
  InnerWord
w <- IO RE
specificConsonantsOToLetterAndWoLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wo") Bool
False
  IO RE
specificConsonantsOToLetterAndWoUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re ->
    InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> (Text -> Text -> Text) -> Bool -> InnerWord
innerReplaceWithFuncMultiple InnerWord
w RE
re (\Text
c1 Text
c2 -> Text
c1 Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> (if Text -> Text
toUpper Text
c2 Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
c2 then String -> Text
pack String
"W" else String -> Text
pack String
"w") Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
c2) Bool
False

mapVOrWLeToWal :: InnerWord -> IO InnerWord
mapVOrWLeToWal :: InnerWord -> IO InnerWord
mapVOrWLeToWal InnerWord
word = IO RE
vOrWLeToWal IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"wal") Bool
False

mapFiToFwi :: InnerWord -> IO InnerWord
mapFiToFwi :: InnerWord -> IO InnerWord
mapFiToFwi InnerWord
word = do
  InnerWord
w <- IO RE
fiToFwiLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wi") Bool
False
  IO RE
fiToFwiUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"FWI") Bool
False

mapVerToWer :: InnerWord -> IO InnerWord
mapVerToWer :: InnerWord -> IO InnerWord
mapVerToWer InnerWord
word = IO RE
verToWer IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"wer") Bool
False

mapPoiToPwoi :: InnerWord -> IO InnerWord
mapPoiToPwoi :: InnerWord -> IO InnerWord
mapPoiToPwoi InnerWord
word = IO RE
poiToPwoi IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1woi") Bool
False

mapSpecificConsonantsLeToLetterAndWal :: InnerWord -> IO InnerWord
mapSpecificConsonantsLeToLetterAndWal :: InnerWord -> IO InnerWord
mapSpecificConsonantsLeToLetterAndWal InnerWord
word =
  IO RE
specificConsonantsLeToLetterAndWal IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wal") Bool
False

mapConsonantRToConsonantW :: InnerWord -> IO InnerWord
mapConsonantRToConsonantW :: InnerWord -> IO InnerWord
mapConsonantRToConsonantW InnerWord
word =
  IO RE
consonantRToConsonantW IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1w") Bool
False

mapLyToWy :: InnerWord -> IO InnerWord
mapLyToWy :: InnerWord -> IO InnerWord
mapLyToWy InnerWord
word = do
  InnerWord
w <- IO RE
lyToWyLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"wy") Bool
False
  IO RE
lyToWyUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"Wy") Bool
False

mapPleToPwe :: InnerWord -> IO InnerWord
mapPleToPwe :: InnerWord -> IO InnerWord
mapPleToPwe InnerWord
word = IO RE
pleToPwe IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1we") Bool
False

mapNrToNw :: InnerWord -> IO InnerWord
mapNrToNw :: InnerWord -> IO InnerWord
mapNrToNw InnerWord
word = do
  InnerWord
w <- IO RE
nrToNwLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"nw") Bool
False
  IO RE
nrToNwUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"NW") Bool
False

mapFucToFwuc :: InnerWord -> IO InnerWord
mapFucToFwuc :: InnerWord -> IO InnerWord
mapFucToFwuc InnerWord
word = IO RE
funcToFwuc IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wuc") Bool
False

mapMomToMwom :: InnerWord -> IO InnerWord
mapMomToMwom :: InnerWord -> IO InnerWord
mapMomToMwom InnerWord
word = IO RE
momToMwom IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wom") Bool
False

mapMeToMwe :: InnerWord -> IO InnerWord
mapMeToMwe :: InnerWord -> IO InnerWord
mapMeToMwe InnerWord
word = IO RE
meToMwe IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1we") Bool
False

mapNVowelToNy :: InnerWord -> IO InnerWord
mapNVowelToNy :: InnerWord -> IO InnerWord
mapNVowelToNy InnerWord
word = do
  InnerWord
w <- IO RE
nVowelToNyFirst IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"ny$1") Bool
False
  InnerWord
w' <- IO RE
nVowelToNySecond IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"Ny$1") Bool
False
  IO RE
nVowelToNyThird IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w' RE
re (String -> Text
pack String
"NY$1") Bool
False

mapOveToUv :: InnerWord -> IO InnerWord
mapOveToUv :: InnerWord -> IO InnerWord
mapOveToUv InnerWord
word = do
  InnerWord
w <- IO RE
oveToUvLower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"uv") Bool
False
  IO RE
oveToUvUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"UV") Bool
False

mapHahaToHeheXd :: InnerWord -> IO InnerWord
mapHahaToHeheXd :: InnerWord -> IO InnerWord
mapHahaToHeheXd InnerWord
word = IO RE
hahaToHeheXd IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"hehe xD") Bool
False

mapTheToTeh :: InnerWord -> IO InnerWord
mapTheToTeh :: InnerWord -> IO InnerWord
mapTheToTeh InnerWord
word = IO RE
theToTeh IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1eh") Bool
False

mapYouToU :: InnerWord -> IO InnerWord
mapYouToU :: InnerWord -> IO InnerWord
mapYouToU InnerWord
word = do
  InnerWord
w <- IO RE
youToUUpper IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"U") Bool
False
  IO RE
youToULower IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
w RE
re (String -> Text
pack String
"u") Bool
False

mapTimeToTim :: InnerWord -> IO InnerWord
mapTimeToTim :: InnerWord -> IO InnerWord
mapTimeToTim InnerWord
word = IO RE
timeToTim IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1im") Bool
False

mapOverToOwor :: InnerWord -> IO InnerWord
mapOverToOwor :: InnerWord -> IO InnerWord
mapOverToOwor InnerWord
word = IO RE
overToOwor IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1wor") Bool
False

mapWorseToWose :: InnerWord -> IO InnerWord
mapWorseToWose :: InnerWord -> IO InnerWord
mapWorseToWose InnerWord
word = IO RE
worseToWose IO RE -> (RE -> IO InnerWord) -> IO InnerWord
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RE
re -> InnerWord -> IO InnerWord
forall (f :: * -> *) a. Applicative f => a -> f a
pure (InnerWord -> IO InnerWord) -> InnerWord -> IO InnerWord
forall a b. (a -> b) -> a -> b
$ InnerWord -> RE -> Text -> Bool -> InnerWord
innerReplace InnerWord
word RE
re (String -> Text
pack String
"$1ose") Bool
False