packages feed

himari 1.1.3.0 → 1.1.4.0

raw patch · 7 files changed

+141/−60 lines, 7 filesdep ~aesonPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aeson

API changes (from Hackage documentation)

+ Himari.Env.Simple: runSimpleNoLogEnv :: MonadIO m => Himari SimpleEnv a -> m a
+ Himari.Logger: discardLogAction :: LogAction

Files

CHANGELOG.md view
@@ -7,6 +7,44 @@  ## [Unreleased] +## [1.1.4.0] - 2026-06-13++### Added++- `discardLogAction` export in `Himari.Logger`,+  a `LogAction` that discards all log output,+  useful for tests that should not write logs to the real terminal+- `runSimpleNoLogEnv` export in `Himari.Env.Simple`,+  a shorthand for `runSimpleEnvWith discardLogAction`+  that runs a `SimpleEnv` action while discarding all log output+- Re-export all public `time` modules that `Data.Time` itself does not re-export+  in `Himari.SafePrelude`:+  `Data.Time.Calendar.Easter`,+  `Data.Time.Calendar.Julian`,+  `Data.Time.Calendar.MonthDay`,+  `Data.Time.Calendar.Month`,+  `Data.Time.Calendar.OrdinalDate`,+  `Data.Time.Calendar.Quarter`,+  `Data.Time.Calendar.WeekDate`,+  `Data.Time.Clock.POSIX`,+  `Data.Time.Clock.System`,+  `Data.Time.Clock.TAI`,+  `Data.Time.Format.ISO8601`,+  and register them in the `fourmolu.yaml` `reexports` setting++### Changed++- Relax `aeson` dependency upper bound from `^>=2.2.3.0` to `^>=2.2.3.0 || ^>=2.3.0.0`+  to allow building against `aeson` 2.3.y.z++### Fixed++- Restructure the `fourmolu.yaml` `reexports` chain to match the module hierarchy+  introduced with `Himari.SafePrelude` in 1.1.3.0:+  re-exports that moved to `Himari.SafePrelude` are now registered under it+  instead of `Himari.Prelude`,+  and the previously missing `Data.Default` and `UnliftIO.Retry` entries are added+ ## [1.1.3.0] - 2026-05-30  ### Added
fourmolu.yaml view
@@ -17,68 +17,85 @@   - module Himari exports "himari" Himari.Prelude    # Himari.Prelude → 外部モジュール-  - module Himari.Prelude exports "base" Control.Applicative-  - module Himari.Prelude exports "base" Control.Monad-  - module Himari.Prelude exports "base" Control.Monad.ST-  - module Himari.Prelude exports "base" Data.Bifoldable-  - module Himari.Prelude exports "base" Data.Bitraversable-  - module Himari.Prelude exports "base" Data.Bool   - module Himari.Prelude exports "base" Data.Coerce-  - module Himari.Prelude exports "base" Data.Complex-  - module Himari.Prelude exports "base" Data.Either-  - module Himari.Prelude exports "base" Data.Eq-  - module Himari.Prelude exports "base" Data.Fixed-  - module Himari.Prelude exports "base" Data.Foldable-  - module Himari.Prelude exports "base" Data.Function-  - module Himari.Prelude exports "base" Data.Functor.Compose-  - module Himari.Prelude exports "base" Data.Int-  - module Himari.Prelude exports "base" Data.Kind-  - module Himari.Prelude exports "base" Data.Maybe-  - module Himari.Prelude exports "base" Data.Ord-  - module Himari.Prelude exports "base" Data.Proxy-  - module Himari.Prelude exports "base" Data.Ratio-  - module Himari.Prelude exports "base" Data.String-  - module Himari.Prelude exports "base" Data.Traversable-  - module Himari.Prelude exports "base" Data.Tuple-  - module Himari.Prelude exports "base" Data.Void-  - module Himari.Prelude exports "base" Data.Word-  - module Himari.Prelude exports "base" GHC.Stack-  - module Himari.Prelude exports "base" Numeric-  - module Himari.Prelude exports "base" Numeric.Natural-  - module Himari.Prelude exports "base" Prelude-  - module Himari.Prelude exports "base" Text.Show-  - module Himari.Prelude exports "convertible" Data.Convertible-  - module Himari.Prelude exports "deepseq" Control.DeepSeq-  - module Himari.Prelude exports "hashable" Data.Hashable-  - module Himari.Prelude exports "lens" Control.Lens-  - module Himari.Prelude exports "monad-logger" Control.Monad.Logger-  - module Himari.Prelude exports "mtl" Control.Monad.Cont-  - module Himari.Prelude exports "mtl" Control.Monad.Reader-  - module Himari.Prelude exports "mtl" Control.Monad.State.Strict-  - module Himari.Prelude exports "mtl" Control.Monad.Writer.CPS   - module Himari.Prelude exports "pretty-simple" Debug.Pretty.Simple-  - module Himari.Prelude exports "pretty-simple" Text.Pretty.Simple   - module Himari.Prelude exports "primitive" Control.Monad.Primitive-  - module Himari.Prelude exports "time" Data.Time+  - module Himari.Prelude exports "retry" UnliftIO.Retry   - module Himari.Prelude exports "unliftio" UnliftIO   - module Himari.Prelude exports "unliftio" UnliftIO.Concurrent   - module Himari.Prelude exports "unliftio" UnliftIO.Directory-  - module Himari.Prelude exports "unliftio" UnliftIO.Environment   - module Himari.Prelude exports "unliftio" UnliftIO.Exception.Lens   - module Himari.Prelude exports "unliftio" UnliftIO.IO.File   # Himari.Prelude → 内部サブモジュール   - module Himari.Prelude exports "himari" Himari.Prelude.Aeson-  - module Himari.Prelude exports "himari" Himari.Prelude.Arrow-  - module Himari.Prelude exports "himari" Himari.Prelude.Catch-  - module Himari.Prelude exports "himari" Himari.Prelude.Category-  - module Himari.Prelude exports "himari" Himari.Prelude.Data-  - module Himari.Prelude exports "himari" Himari.Prelude.FilePath-  - module Himari.Prelude exports "himari" Himari.Prelude.Generics-  - module Himari.Prelude exports "himari" Himari.Prelude.Monoid   - module Himari.Prelude exports "himari" Himari.Prelude.Process-  - module Himari.Prelude exports "himari" Himari.Prelude.Safe-  - module Himari.Prelude exports "himari" Himari.Prelude.Type   - module Himari.Prelude exports "himari" Himari.Prelude.TypeLevel+  - module Himari.Prelude exports "himari" Himari.SafePrelude++  # Himari.SafePrelude → 外部モジュール+  - module Himari.SafePrelude exports "base" Control.Applicative+  - module Himari.SafePrelude exports "base" Control.Monad+  - module Himari.SafePrelude exports "base" Control.Monad.ST+  - module Himari.SafePrelude exports "base" Data.Bifoldable+  - module Himari.SafePrelude exports "base" Data.Bitraversable+  - module Himari.SafePrelude exports "base" Data.Bool+  - module Himari.SafePrelude exports "base" Data.Complex+  - module Himari.SafePrelude exports "base" Data.Either+  - module Himari.SafePrelude exports "base" Data.Eq+  - module Himari.SafePrelude exports "base" Data.Fixed+  - module Himari.SafePrelude exports "base" Data.Foldable+  - module Himari.SafePrelude exports "base" Data.Function+  - module Himari.SafePrelude exports "base" Data.Functor.Compose+  - module Himari.SafePrelude exports "base" Data.Int+  - module Himari.SafePrelude exports "base" Data.Kind+  - module Himari.SafePrelude exports "base" Data.Maybe+  - module Himari.SafePrelude exports "base" Data.Ord+  - module Himari.SafePrelude exports "base" Data.Proxy+  - module Himari.SafePrelude exports "base" Data.Ratio+  - module Himari.SafePrelude exports "base" Data.String+  - module Himari.SafePrelude exports "base" Data.Traversable+  - module Himari.SafePrelude exports "base" Data.Tuple+  - module Himari.SafePrelude exports "base" Data.Void+  - module Himari.SafePrelude exports "base" Data.Word+  - module Himari.SafePrelude exports "base" GHC.Stack+  - module Himari.SafePrelude exports "base" Numeric+  - module Himari.SafePrelude exports "base" Numeric.Natural+  - module Himari.SafePrelude exports "base" Prelude+  - module Himari.SafePrelude exports "base" Text.Show+  - module Himari.SafePrelude exports "convertible" Data.Convertible+  - module Himari.SafePrelude exports "data-default" Data.Default+  - module Himari.SafePrelude exports "deepseq" Control.DeepSeq+  - module Himari.SafePrelude exports "hashable" Data.Hashable+  - module Himari.SafePrelude exports "lens" Control.Lens+  - module Himari.SafePrelude exports "monad-logger" Control.Monad.Logger+  - module Himari.SafePrelude exports "mtl" Control.Monad.Cont+  - module Himari.SafePrelude exports "mtl" Control.Monad.Reader+  - module Himari.SafePrelude exports "mtl" Control.Monad.State.Strict+  - module Himari.SafePrelude exports "mtl" Control.Monad.Writer.CPS+  - module Himari.SafePrelude exports "pretty-simple" Text.Pretty.Simple+  - module Himari.SafePrelude exports "time" Data.Time+  - module Himari.SafePrelude exports "time" Data.Time.Calendar.Easter+  - module Himari.SafePrelude exports "time" Data.Time.Calendar.Julian+  - module Himari.SafePrelude exports "time" Data.Time.Calendar.Month+  - module Himari.SafePrelude exports "time" Data.Time.Calendar.MonthDay+  - module Himari.SafePrelude exports "time" Data.Time.Calendar.OrdinalDate+  - module Himari.SafePrelude exports "time" Data.Time.Calendar.Quarter+  - module Himari.SafePrelude exports "time" Data.Time.Calendar.WeekDate+  - module Himari.SafePrelude exports "time" Data.Time.Clock.POSIX+  - module Himari.SafePrelude exports "time" Data.Time.Clock.System+  - module Himari.SafePrelude exports "time" Data.Time.Clock.TAI+  - module Himari.SafePrelude exports "time" Data.Time.Format.ISO8601+  - module Himari.SafePrelude exports "unliftio" UnliftIO.Environment+  # Himari.SafePrelude → 内部サブモジュール+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Arrow+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Catch+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Category+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Data+  - module Himari.SafePrelude exports "himari" Himari.Prelude.FilePath+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Generics+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Monoid+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Safe+  - module Himari.SafePrelude exports "himari" Himari.Prelude.Type    # Himari.Prelude.Aeson → 外部モジュール   - module Himari.Prelude.Aeson exports "aeson" Data.Aeson
himari.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.12 name: himari-version: 1.1.3.0+version: 1.1.4.0 synopsis: A standard library for Haskell as an alternative to rio description:   A standard library for Haskell inspired by rio.@@ -80,7 +80,7 @@     ViewPatterns    build-depends:-    aeson ^>=2.2.3.0,+    aeson ^>=2.2.3.0 || ^>=2.3.0.0,     aeson-pretty ^>=0.8.10,     base >=4.19.2.0 && <4.23,     bytestring ^>=0.12.2.0,
src/Himari/Env/Simple.hs view
@@ -6,6 +6,7 @@ module Himari.Env.Simple   ( SimpleEnv   , runSimpleEnv+  , runSimpleNoLogEnv   , runSimpleEnvWith   , mkSimpleEnv   ) where@@ -32,6 +33,11 @@ runSimpleEnv f = do   env <- mkSimpleEnv   runHimari env f++-- | `SimpleEnv`のコンテキストのアクションをログを破棄して実行します。+-- テストなど実際のターミナルにログを出力したくない場合に使えます。+runSimpleNoLogEnv :: (MonadIO m) => Himari SimpleEnv a -> m a+runSimpleNoLogEnv = runSimpleEnvWith discardLogAction  -- | `SimpleEnv`のコンテキストのアクションをカスタム出力で実行します。 runSimpleEnvWith
src/Himari/Logger.hs view
@@ -7,6 +7,7 @@   , LogAction   , defaultMonadLoggerLog   , defaultLogAction+  , discardLogAction   ) where  import Himari.Env@@ -35,3 +36,8 @@ -- 標準エラー出力にログを出力します。 defaultLogAction :: LogAction defaultLogAction = defaultOutput stderr++-- | ログを一切出力せず破棄するログ出力。+-- テストなどで実際のターミナルにログを出力したくない場合に使えます。+discardLogAction :: LogAction+discardLogAction _loc _src _level _msg = pure ()
src/Himari/SafePrelude.hs view
@@ -38,6 +38,17 @@ import Data.Ratio as Export import Data.String as Export import Data.Time as Export+import Data.Time.Calendar.Easter as Export+import Data.Time.Calendar.Julian as Export+import Data.Time.Calendar.Month as Export+import Data.Time.Calendar.MonthDay as Export+import Data.Time.Calendar.OrdinalDate as Export+import Data.Time.Calendar.Quarter as Export+import Data.Time.Calendar.WeekDate as Export+import Data.Time.Clock.POSIX as Export+import Data.Time.Clock.System as Export+import Data.Time.Clock.TAI as Export+import Data.Time.Format.ISO8601 as Export import Data.Traversable as Export import Data.Tuple as Export import Data.Void as Export
test/Himari/Env/SimpleSpec.hs view
@@ -7,26 +7,29 @@  spec :: Spec spec = do+  -- テスト実行時に実際のターミナルへログを出力すると、+  -- Errorなどがログディスプレイでハイライトされて紛らわしいので、+  -- ログの出力を検証しないテストでは`runSimpleNoLogEnv`で出力を破棄する。   describe "logging" $ do     it       "outputs debug level logs"-      (runSimpleEnv $ $(logDebug) "debug message" :: IO ())+      (runSimpleNoLogEnv $ $(logDebug) "debug message" :: IO ())      it       "outputs info level logs"-      (runSimpleEnv $ $(logInfo) "info message" :: IO ())+      (runSimpleNoLogEnv $ $(logInfo) "info message" :: IO ())      it       "outputs warning level logs"-      (runSimpleEnv $ $(logWarn) "warning message" :: IO ())+      (runSimpleNoLogEnv $ $(logWarn) "warning message" :: IO ())      it       "outputs error level logs"-      (runSimpleEnv $ $(logError) "error message" :: IO ())+      (runSimpleNoLogEnv $ $(logError) "error message" :: IO ())      it       "handles multiple log calls"-      ( runSimpleEnv+      ( runSimpleNoLogEnv           ( do               $(logInfo) "first log"               $(logInfo) "second log"@@ -36,7 +39,7 @@       )      it "works with monadic composition" $ do-      result <- runSimpleEnv $ do+      result <- runSimpleNoLogEnv $ do         $(logInfo) "starting computation"         let x = 20 :: Int         $(logDebug) ("intermediate value: " <> convert (show x))@@ -47,7 +50,7 @@      it       "supports monad-logger functions"-      ( runSimpleEnv+      ( runSimpleNoLogEnv           ( do               logInfoN "using logInfoN"               logDebugN "using logDebugN"@@ -85,7 +88,7 @@       result `shouldBe` 42      it "can access and use the environment" $ do-      result <- runSimpleEnv $ do+      result <- runSimpleNoLogEnv $ do         $(logInfo) "computing result"         pure (10 + 32 :: Int)       result `shouldBe` 42