module Data.Char.Properties.Decomposition
(
	module Data.Char.Properties.DecompositionTypes,
	module Data.Char.Properties.DecompositionData,
	module Data.Char.Properties.Decomposition
) where
{
	import Data.Char.Properties.DecompositionData;
	import Data.Char.Properties.DecompositionTypes;
	import Prelude;

	extractDecompositionCanonical :: Decomposition -> Maybe [Char];
	extractDecompositionCanonical (MkDecomposition DCCanonical decomp) = Just decomp;
	extractDecompositionCanonical _ = Nothing;

	decomposeCanonical :: String -> String;
	decomposeCanonical [] = [];
	decomposeCanonical (c:cs) = (case (extractDecompositionCanonical (getDecomposition c)) of
	{
		Nothing -> [c];
		Just cd -> decomposeCanonical cd;
	}) ++ (decomposeCanonical cs);

	extractDecompositionCompatibility :: Decomposition -> Maybe [Char];
	extractDecompositionCompatibility (MkDecomposition _ decomp) = Just decomp;
	extractDecompositionCompatibility _ = Nothing;

	decomposeCompatibility :: String -> String;
	decomposeCompatibility [] = [];
	decomposeCompatibility (c:cs) = (case (extractDecompositionCompatibility (getDecomposition c)) of
	{
		Nothing -> [c];
		Just cd -> decomposeCompatibility cd;
	}) ++ (decomposeCompatibility cs);
}