module Language.Phonetic.Encoder
( Code
, Encoder (..)
) where
import qualified Data.Set as Set
import Data.ListLike (ListLike)
import qualified Data.ListLike as ListLike
import Language.Phonetic.Internal
class Encoder enc where
alphabet :: Alphabet enc
encodeUnsafe :: ListLike full Char => full -> Code enc
encode :: ListLike full Char => full -> Maybe (Code enc)
encode ll | ListLike.all (flip Set.member alph) ll = Just (encodeUnsafe ll)
| otherwise = Nothing
where alph = getAlphabet (alphabet :: Alphabet enc)