packages feed

i18n-0.4.0.0: src/Data/Text/I18n/Types.hs

-- |
-- Module:      Data.Text.I18n.Po
-- Copyright:   (c) 2011-2016 Eugene Grigoriev
-- License:     BSD3
-- Maintainer:  Philip Cunningham <hello@filib.io>
-- Stability:   experimental
-- Portability: portable
--
-- Internationalisation support for Haskell.

module Data.Text.I18n.Types (
    -- * Type Declarations
    Context,
    CtxMap,
    I18n,
    L10n,
    Locale(..),
    MsgDec(..),
    Msgid(..),
    Msgstr,
    ) where

import           Control.Monad.Identity (Identity)
import           Control.Monad.Reader   (ReaderT)
import qualified Data.Map.Strict        as Map
import qualified Data.Text              as T

-- $setup
-- >>> :set -XOverloadedStrings
--
-- | Local context.
type Context = T.Text

-- | Mapping from a contexts to translation mappings.
type CtxMap = Map.Map (Maybe Context) TranslationMap

-- | The Internationalization monad built using monad transformers.
type I18n a = ReaderT (Locale, L10n, Maybe Context) Identity a

-- | The Localization structure.
type L10n = Map.Map Locale (Map.Map (Maybe Context) (Map.Map Msgid [Msgstr]))

-- | Textual representation of a locale e.g.
-- >>> Locale "en_GB"
-- ...
newtype Locale = Locale T.Text
  deriving (Show, Eq, Ord)

-- | Message delcaration.
data MsgDec = MsgDec (Maybe Context) Msgid [Msgstr]

-- | Untranslated string.
-- >>> Msgid "hello there"
-- ...
newtype Msgid = Msgid T.Text
  deriving (Show, Eq, Ord)

-- | Translated string.
type Msgstr = T.Text

-- | Mapping from identifiers to translations.
type TranslationMap = Map.Map Msgid [Msgstr]