packages feed

fluent-icu-1.1.0: test/Prelude.hs

{-# LANGUAGE PackageImports #-}

module Prelude
    ( module Prelude
    , module Data.Scientific
    , module Data.Text
    , module Data.Time
    , module Language.Fluent
    , module Language.Fluent.ICU
    , module Test.Hspec
    )
where

import Data.Foldable qualified as Foldable
import Data.List.NonEmpty (NonEmpty)
import Data.List.NonEmpty qualified as NonEmpty
import Data.Scientific (Scientific)
import Data.Text (Text)
import Data.Time (UTCTime)
import Language.Fluent
import Language.Fluent.Bundle qualified as Bundle
import Language.Fluent.ICU
import Language.Fluent.Locale qualified as Locale
import Language.Fluent.Value qualified as Value
import Test.Hspec
import "base" Prelude

instance
    (Foldable f, r ~ Either String Text)
    => Translate (f LocaleName -> Resource -> r)
    where
    translate arguments (Foldable.toList -> NonEmpty.fromList -> locales) =
        translate arguments
            . Bundle.override (Bundle.UseIsolating False)
            . bundle locales
            . pure

instance (r ~ Either String Text) => Translate (LocaleName -> Resource -> r) where
    translate arguments = translate arguments . pure @NonEmpty

instance (r ~ Either String Text) => Translate (Resource -> r) where
    translate arguments = translate arguments $ Locale.fromCode @LocaleName "en-GB"

number :: Scientific -> Value
number = numberWith Cardinal 0

ordinal :: Scientific -> Value
ordinal = numberWith Ordinal 0

numberWith :: Form -> Int -> Scientific -> Value
numberWith form minimumFractionDigits amount =
    Value.Number amount numberOptions{form, minimumFractionDigits}