brassica-1.0.0: src/Brassica/SoundChange.hs
-- |
-- Module : Brassica.SoundChange
-- Copyright : See LICENSE file
-- License : BSD3
-- Maintainer : Brad Neimann
--
-- The modules below provide Brassica’s support for sound changes.
-- For further details on their syntax and processing, refer to the
-- [reference guide](https://github.com/bradrn/brassica/blob/v1.0.0/docs/Reference.md),
-- and the documentation of individual modules.
--
-- In brief, a sound changes file passes through the following phases:
--
-- 1. First it is /parsed/ to a @'SoundChanges' 'CategorySpec' 'Directive'@
-- 2. Next it undergoes /expansion/ to give a @'SoundChanges' 'Expanded' 'GraphemeList'@
-- 3. Finally it can be /applied/ to a 'PWord' using 'applyChanges' or similar.
--
-- Words may also be extracted from a words file for application using
-- 'tokeniseWords', and the file can be recreated using
-- 'detokeniseWords' or similar. (For an MDF file one can similarly
-- use 'Brassica.SFM.MDF.tokeniseMDF'.)
--
-- For a simple example, the following sample applies a sound change
-- file to a words file (without error-handling):
--
-- @
-- import Data.Maybe (mapMaybe)
-- import System.Environment (getArgs)
-- import Brassica.SoundChange
--
-- main :: IO ()
-- main = do
-- [changesFile, wordsFile] <- getArgs
-- changes <- readFile changesFile
-- words <- readFile wordsFile
--
-- let Right changesParsed = 'parseSoundChanges' changes
-- Right changesExpanded = 'expandSoundChanges' changesParsed
--
-- Right wordsTokenised =
-- 'withFirstCategoriesDecl' 'tokeniseWords' changesExpanded words
--
-- wordsOutput = fmap (mapMaybe 'getOutput' . 'applyChanges' changesExpanded) <$> wordsTokenised
--
-- putStrLn $ 'detokeniseWords' $
-- concatMap ('splitMultipleResults' "/") wordsOutput
-- @
--
-- If writing sound changes in Haskell, it is suggested to skip
-- parsing and expansion and directly create a value of type
-- @'SoundChanges' 'Expanded' ('Bool', [t'Grapheme'])@. Expansion is
-- of little use when v'Category's and v'Autosegment's can be assigned
-- names in the code itself.
module Brassica.SoundChange (module X) where
-- NB. Haddock seems to list these re-exports in reverse order
import Brassica.SoundChange.Tokenise as X
import Brassica.SoundChange.Apply as X
import Brassica.SoundChange.Expand as X
import Brassica.SoundChange.Parse as X
import Brassica.SoundChange.Types as X