himari-1.1.2.0: CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Haskell Package Versioning Policy](https://pvp.haskell.org/).
## [Unreleased]
## [1.1.2.0] - 2026-05-25
### Added
- `mkSimpleEnv` export in `Himari.Env.Simple` to construct a `SimpleEnv`
with the default settings separately from running it
- `defaultMonadLoggerLog` export in `Himari.Logger`,
a reusable `monadLoggerLog` implementation for any `HasLogAction` environment
- `defaultLogAction` export in `Himari.Logger`
for the default `LogAction` that writes to standard error
- Safe Haskell annotations.
Modules that expose only safe APIs and import only safe modules are marked `Safe`;
they disable `TemplateHaskell`, `DerivingVia`, and `GeneralizedNewtypeDeriving`,
which are enabled globally but not allowed under Safe Haskell.
Modules that expose only safe APIs but cannot be inferred `Safe`
(because a dependency is not marked safe,
or because they use Template Haskell or `GeneralizedNewtypeDeriving` internally)
are marked `Trustworthy`.
## [1.1.1.0] - 2026-05-24
### Added
- `Numeric` re-export in `Himari.Prelude` for extra numeric functions
- HLint rules to warn against partial functions re-exported from `Numeric`:
`showIntAtBase`, `showInt`, `showHex`, `showOct`, and `showBin`,
which throw on negative (or invalid base) input
## [1.1.0.0] - 2026-04-11
### Added
- GHC 9.14.1 support
### Changed
- Relax `sydtest` dependency upper bound from `<0.19` to `<0.24`
to support nixpkgs sydtest 0.20.0.1+
### Removed
- Drop Intel Mac (x86_64-darwin) from Nix build targets due
to Nix ending support for this platform
## [1.0.5.0] - 2026-01-12
### Added
- `data-default` package (^>=0.8.0.2) as a dependency for default value support
- `Data.Default` re-export in `Himari.Prelude` for `Default` type class and `def` function
- `retry` package (^>=0.9.3.1) as a dependency for retry combinators
- `UnliftIO.Retry` re-export in `Himari.Prelude` for retry operations with exponential backoff
- HLint rules to warn against dangerous language extensions:
`AllowAmbiguousTypes`,
`DeferTypeErrors`,
`ExtendedDefaultRules`,
`ImpredicativeTypes`,
`IncoherentInstances`,
`LiberalTypeSynonyms`,
`OverlappingInstances`,
`RebindableSyntax`,
`UndecidableSuperClasses`
- HLint rules to warn against discouraged language extensions:
`ImplicitParams`,
`UndecidableInstances`
### Changed
- Document recommended language extensions beyond GHC2024
(e.g.,
`BlockArguments`,
`NoFieldSelectors`,
`OverloadedStrings`,
`StrictData`,
etc.) with rationale for each
- Document extensions intentionally not enabled
(e.g.,
`Arrows`,
`DeriveAnyClass`,
`OverloadedLists`,
`OverloadedRecordUpdate`,
`Strict`,
`UnicodeSyntax`
) with reasons
- Document dangerous language extensions that should be avoided:
`AllowAmbiguousTypes`,
`DeferTypeErrors`,
`ExtendedDefaultRules`,
`ImpredicativeTypes`,
`IncoherentInstances`,
`LiberalTypeSynonyms`,
`OverlappingInstances`,
`RebindableSyntax`,
`UndecidableSuperClasses`
- Document discouraged language extensions that require caution:
`ImplicitParams`,
`UndecidableInstances`
## [1.0.4.0] - 2026-01-09
### Added
- `UnliftIO.Concurrent` re-export in `Himari.Prelude` for lifted concurrent operations
- `UnliftIO.Directory` re-export in `Himari.Prelude` for lifted directory operations
- `UnliftIO.Environment` re-export in `Himari.Prelude` for lifted environment operations
- `UnliftIO.Exception.Lens` re-export in `Himari.Prelude` for lens-based exception handling
- `UnliftIO.Foreign` is not re-exported to avoid `withArray` conflict with `Data.Aeson`
- `UnliftIO.IO.File` re-export in `Himari.Prelude` for atomic/durable file operations
- HLint rules: prefer `UnliftIO.Concurrent` over `Control.Concurrent`
- HLint rules: prefer `UnliftIO.Environment` over `System.Environment`
- HLint rules: prefer `UnliftIO.Exception.Lens` over `Control.Exception.Lens`
- HLint rule: restrict `forkOnWithUnmask` (exceptions don't propagate to parent thread)
### Changed
- `System.Process.Typed` hiding `setEnv` to prefer `UnliftIO.Environment.setEnv`
- `System.Process.Typed` is now re-exported via `Himari.Prelude.Process` instead of directly
## [1.0.3.2] - 2026-01-08
### Changed
- Fix HLint language extension configuration: use `arguments` with `-X` flags for parsing
instead of `extensions` block (which is for restricting allowed extensions)
- Rename `hlint/rules/extensions.dhall` to `hlint/rules/parse-extensions.dhall`
- Remove `TemplateHaskell` from parse extensions (already enabled by default in HLint)
## [1.0.3.1] - 2026-01-08
### Added
- HLint language extension support in Dhall configuration
- Default language extensions for parsing:
`QuasiQuotes`,
`CPP`,
`RecursiveDo`,
`OverloadedRecordDot`,
`OverloadedRecordUpdate`,
`TemplateHaskell`,
`BlockArguments`
- `ExtensionItem` type and helper functions
(`extensionNames`, `extensionNamesWithin`, `extensions`)
in `hlint/Builder.dhall`
- `hlint/rules/extensions.dhall` for managing default enabled extensions
## [1.0.3.0] - 2026-01-08
### Added
- `GHC.Stack` re-export in `Himari.Prelude` for call stack support (`HasCallStack`, etc.)
- HLint rule for `errorWithStackTrace` (deprecated function warning)
## [1.0.2.0] - 2026-01-07
### Added
- `Himari.Prelude.Arrow`: `Control.Arrow` re-exports (hiding conflicting symbols)
- `Himari.Prelude.Catch`: `Control.Monad.Catch` re-exports (hiding UnliftIO conflicts)
- `Himari.Prelude.Data`: `Data.Data` re-exports (hiding GHC.Generics conflicts)
- `Himari.Prelude.Monoid`: `Data.Monoid`/`Data.Semigroup` re-exports (hiding conflicts)
- `Himari.Prelude.TypeLevel`: type-level programming (`Data.Type.Coercion`, `Data.Type.Equality`)
- `Himari.Prelude.FunctorSpec`: test module for functor-related exports
- `Control.Arrow` re-export in `Himari.Prelude` (via `Himari.Prelude.Arrow`)
- `Data.Coerce` re-export in `Himari.Prelude` for safe type coercion
- `Data.Complex` re-export in `Himari.Prelude` for complex number support
- `Data.Data` re-export in `Himari.Prelude` (via `Himari.Prelude.Data`) for generic programming
- `Data.Fixed` re-export in `Himari.Prelude` for fixed-point arithmetic
- `Data.Functor.Compose` re-export in `Himari.Prelude` for functor composition
- `Data.Int` re-export in `Himari.Prelude` for sized integer types
- `Data.Kind` re-export in `Himari.Prelude` for kind-level types (`Type`, `Constraint`)
- `Data.Monoid`/`Data.Semigroup` re-export in `Himari.Prelude` (via `Himari.Prelude.Monoid`)
- `Data.Proxy` re-export in `Himari.Prelude` for type-level proxy values
- `Data.Type.Coercion`/`Data.Type.Equality` re-export (via `Himari.Prelude.TypeLevel`)
- `Numeric.Natural` re-export in `Himari.Prelude` for non-negative integers
### Changed
- `Himari.Prelude.Aeson`: Hide overly general symbols
- `Himari.Prelude.Catch`: Hide `Handler` to avoid conflicts
## [1.0.1.0] - 2026-01-06
### Added
- Added `Magnify` instance for `Himari` monad
- Bundle `fourmolu.yaml` in Cabal `data-files` so downstream users can reuse the formatter config
- Add `fourmolu.yaml` reexports and fixity settings to resolve operator precedence
- Document setup steps in README for copying/merging `.hlint.yaml` and `fourmolu.yaml`
- Add fourmolu customization notes to README
## [1.0.0.2] - 2026-01-03
### Added
- Support for Windows
- Support for macOS (x86_64-darwin, aarch64-darwin) and Linux ARM (aarch64-linux)
- `Himari.Prelude.Aeson` module for JSON-related re-exports
- `Himari.Prelude.Safe` module for safe function re-exports
- `Himari.Prelude.Category` module for `Control.Category` re-exports (hiding `id` and `.`)
- `Himari.Prelude.Generics` module for `GHC.Generics` re-exports (hiding `from` and `to`)
- `Himari.Prelude.FilePath` module for `System.FilePath` re-exports (hiding `<.>`)
- `Himari.Prelude.Type` module for type-only re-exports (`ByteString`, `Text`, `Map`, etc.)
### Changed
- Refactor `Himari.Prelude` to use submodules for cleaner Haddock documentation
## [1.0.0.1] - 2026-01-01
### Changed
- Move `-j` option from `himari.cabal` ghc-options to `cabal.project`
to fix Hackage upload compatibility
## [1.0.0.0] - 2026-01-01
### Added
- `Himari` module that re-exports all submodules
- `Himari.Prelude` module as a custom Prelude
- `Himari.Char` module with `digitToIntMay`, `intToDigitMay`, `chrMay`
- `Himari.Env` module with `Himari` newtype, `runHimari`, `liftHimari`, `mapHimari`
- `Himari.Env.Simple` module with `SimpleEnv`, `runSimpleEnv`, `runSimpleEnvWith`
- `Himari.Logger` module with `HasLogAction` type class and `LogAction` type alias
- Re-exports from `Control.Lens`, `Control.Monad.*`, `Data.*`, `UnliftIO` in Prelude
- Re-exports from `safe`, `aeson`, `pretty-simple`, `monad-logger`, `typed-process` in Prelude
- Common type exports: `ByteString`, `Text`, `Vector`, `Map`, `HashMap`, etc.
- Bundled `.hlint.yaml` as `data-files` with comprehensive rules managed in Dhall
- HLint rules for partial function warnings in base, containers, text, bytestring, vector
- HLint rules for unsafe function warnings in primitive, UnliftIO
- HLint rules preferring UnliftIO over base IO modules
- HLint rules preferring typed-process over System.Process
- HLint rules preferring `convert` from convertible
- HLint rules preferring `pTrace*` over `Debug.Trace`
- HLint rules for qualified import naming conventions
- HLint rules for aeson, lens, mtl, yaml, and more
- Support for GHC 9.10.2, 9.10.3, and 9.12.2
- GHC2024 as the default language with `NoImplicitPrelude` extension