packages feed

fluent-icu-1.0.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 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 -> SomeValue
number = numberWith Cardinal 0

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

numberWith :: Form -> Int -> Scientific -> SomeValue
numberWith form minimumFractionDigits amount =
    NumberValue amount numberOptions{form, minimumFractionDigits}