module Data.Text.PgpWordlist.Internal.Types where



import           Data.Text                              (Text)
import           Data.Text.PgpWordlist.Internal.AltList
import           Data.Word



-- | Abstract representation of a PGP word list.
newtype PgpWordlist = PgpWordlist (AltList EvenWord OddWord)
    deriving (Eq, Ord, Show)



-- | Possible translation errors from a list of PGP words to binary format.
data TranslationError =
      BadWord Text         -- ^ Word is not recognized
    | BadParity Text Word8 -- ^ Word is recognized, but from the wrong
                           --   alphabet. Duplicates, omissions, and neighbour
                           --   transpositions are often cause for this.
    deriving (Eq, Ord, Show)

-- | Word that is supposed to occur in an even position
newtype EvenWord = EvenWord { unEvenWord :: Text }
    deriving (Eq, Ord, Show)


-- | Word that is supposed to occur in an odd position
newtype OddWord = OddWord { unOddWord :: Text }
    deriving (Eq, Ord, Show)