{-# LANGUAGE OverloadedStrings #-} module PhoneticChanges where -- import qualified Data.Text as T -- import qualified Text.Regex as R -- type PhoneticWord = T.Text -- type Translation = T.Text -- type WrittenWord = T.Text -- data SoundLaw = -- SoundLaw R.Regex T.Text -- data WritingLaw = -- WritingLaw R.Regex T.Text -- type WritingSystem = [WritingLaw] -- -- PhoneticWord → Translation -- translate :: PhoneticWord -> Translation -- -- Writing system → Phonetic Word → Written Word -- getWritten :: WritingSystem -> PhoneticWord -> WrittenWord -- changeWord :: PhoneticWord -> SoundLaw -> PhoneticWord -- changeWord word (SoundLaw regex changedPart) = -- T.pack (R.subRegex regex (T.unpack word) (T.unpack changedPart)) -- migrateWord :: PhoneticWord -> [SoundLaw] -> PhoneticWord -- migrateWord = foldl changeWord -- migrateWords :: [PhoneticWord] -> [SoundLaw] -> [PhoneticWord] -- migrateWords words laws = map (`migrateWord` laws) words -- evolveLanguage :: LangName -> LangName -> [PhoneticWord] -- evolveLanguage fromLang toLang = migrateWords wordsFrom lawsTo -- where wordsFrom = 1 -- lawsTo = 1