packages feed

himari 1.0.4.0 → 1.0.5.0

raw patch · 16 files changed

+190/−24 lines, 16 filesdep +data-defaultdep +retryPVP ok

version bump matches the API change (PVP)

Dependencies added: data-default, retry

API changes (from Hackage documentation)

Files

.hlint.yaml view
@@ -11,12 +11,37 @@ #   * このファイルをプロジェクトルートに .hlint.yaml としてコピー #   * または .hlint.yaml から参照: - arguments: [--hint=path/to/this/.hlint.yaml] - arguments:+    - "-XGHC2024"+    - "-XApplicativeDo"     - "-XBlockArguments"     - "-XCPP"+    - "-XDefaultSignatures"+    - "-XDerivingVia"+    - "-XDuplicateRecordFields"+    - "-XFunctionalDependencies"+    - "-XLexicalNegation"+    - "-XLinearTypes"+    - "-XMonadComprehensions"+    - "-XMultiWayIf"+    - "-XNegativeLiterals"+    - "-XNoFieldSelectors"+    - "-XNoImplicitPrelude"+    - "-XOverloadedLabels"     - "-XOverloadedRecordDot"-    - "-XOverloadedRecordUpdate"+    - "-XOverloadedStrings"+    - "-XParallelListComp"+    - "-XPatternSynonyms"+    - "-XQualifiedDo"+    - "-XQuantifiedConstraints"     - "-XQuasiQuotes"+    - "-XRecordWildCards"     - "-XRecursiveDo"+    - "-XStrictData"+    - "-XTemplateHaskell"+    - "-XTypeData"+    - "-XTypeFamilies"+    - "-XTypeFamilyDependencies"+    - "-XViewPatterns" - group:     enabled: true     name: generalise@@ -610,6 +635,52 @@       within: []     - message: "Deprecated. Use error instead, which now includes stack traces."       name: errorWithStackTrace+      within: []+- extensions:+    - message: "Defers ambiguity errors to call sites, making debugging harder"+      name:+        - AllowAmbiguousTypes+      within: []+    - message: "Defers type errors to runtime, defeating Haskell's type safety"+      name:+        - DeferTypeErrors+      within: []+    - message: "Causes unexpected type defaulting (e.g., show.read defaults to ())"+      name:+        - ExtendedDefaultRules+      within: []+    - message: Experimental and may break in future GHC versions+      name:+        - ImpredicativeTypes+      within: []+    - message: "Makes instance selection non-deterministic and order-dependent"+      name:+        - IncoherentInstances+      within: []+    - message: Can cause Core Lint errors with DataKinds and PolyKinds+      name:+        - LiberalTypeSynonyms+      within: []+    - message: "Deprecated since GHC 7.10, use OVERLAPPING pragma if truly needed"+      name:+        - OverlappingInstances+      within: []+    - message: "Changes do/if-then-else semantics, breaks deriving and TH"+      name:+        - RebindableSyntax+      within: []+    - message: "Can cause type checker non-termination or stack overflow"+      name:+        - UndecidableSuperClasses+      within: []+- extensions:+    - message: 'Breaks coherence. If unavoidable, add {-# HLINT ignore "Avoid restricted extensions" #-}'+      name:+        - ImplicitParams+      within: []+    - message: 'May cause type checker loops. If unavoidable, add {-# HLINT ignore "Avoid restricted extensions" #-}'+      name:+        - UndecidableInstances       within: [] - functions:     - message: "Partial: throws on empty Fold. Use (^?) instead."
CHANGELOG.md view
@@ -7,6 +7,30 @@  ## [Unreleased] +## [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`, `StrictData`,+  `OverloadedStrings`, `NoFieldSelectors`, 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
himari.cabal view
@@ -1,6 +1,6 @@-cabal-version: 3.0+cabal-version: 3.12 name: himari-version: 1.0.4.0+version: 1.0.5.0 synopsis: A standard library for Haskell as an alternative to rio description:   A standard library for Haskell inspired by rio.@@ -47,7 +47,36 @@    default-language: GHC2024   default-extensions:+    ApplicativeDo+    BlockArguments+    CPP+    DefaultSignatures+    DerivingVia+    DuplicateRecordFields+    FunctionalDependencies+    LexicalNegation+    LinearTypes+    MonadComprehensions+    MultiWayIf+    NegativeLiterals+    NoFieldSelectors     NoImplicitPrelude+    OverloadedLabels+    OverloadedRecordDot+    OverloadedStrings+    ParallelListComp+    PatternSynonyms+    QualifiedDo+    QuantifiedConstraints+    QuasiQuotes+    RecordWildCards+    RecursiveDo+    StrictData+    TemplateHaskell+    TypeData+    TypeFamilies+    TypeFamilyDependencies+    ViewPatterns    build-depends:     aeson ^>=2.2.3.0,@@ -56,6 +85,7 @@     bytestring ^>=0.12.2.0,     containers ^>=0.7,     convertible ^>=1.1.1.1,+    data-default ^>=0.8.0.2,     deepseq ^>=1.5.0.0,     deriving-aeson ^>=0.2.10,     exceptions ^>=0.10.9,@@ -66,6 +96,7 @@     mtl ^>=2.3.1,     pretty-simple ^>=4.1.3,     primitive ^>=0.9.1.0,+    retry ^>=0.9.3.1,     safe ^>=0.3.21,     text ^>=2.1.2,     time ^>=1.12.2,@@ -123,7 +154,9 @@     Himari.Prelude.FunctorSpec     Himari.Title     HlintBaseSpec+    HlintExtensionSpec     HlintSamples.BasePartial+    HlintSamples.ExtensionDangerous     HlintSamples.UnliftioPreference     HlintUnliftioSpec     TitleSpec
src/Himari/Env.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE TypeFamilies #-}- -- | Core environment monad for Himari. module Himari.Env   ( Himari (..)
src/Himari/Env/Simple.hs view
@@ -1,7 +1,3 @@-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE NoFieldSelectors #-}- -- | 基本的な環境を提供するモジュール。 -- 単純に実行だけをしたい場合、これで十分結果を手に入れられることが多いです。 module Himari.Env.Simple
src/Himari/Logger.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE FunctionalDependencies #-}- -- | Logger utilities for Himari. module Himari.Logger   ( HasLogAction (..)
src/Himari/Prelude.hs view
@@ -20,6 +20,7 @@ import Data.Coerce as Export import Data.Complex as Export import Data.Convertible as Export+import Data.Default as Export import Data.Either as Export import Data.Eq as Export import Data.Fixed as Export@@ -62,4 +63,5 @@ import UnliftIO.Environment as Export import UnliftIO.Exception.Lens as Export import UnliftIO.IO.File as Export+import UnliftIO.Retry as Export import Prelude as Export
test/Himari/Env/SimpleSpec.hs view
@@ -1,6 +1,3 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}- module Himari.Env.SimpleSpec (spec) where  import Himari
test/Himari/Prelude/FunctorSpec.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE OverloadedStrings #-}- -- | Tests for functor-related re-exports in Himari.Prelude. module Himari.Prelude.FunctorSpec (spec) where 
test/Himari/Title.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE OverloadedStrings #-}- module Himari.Title   ( titleComponents   , generateAllCombinations
test/HlintBaseSpec.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE OverloadedStrings #-}- module HlintBaseSpec (spec) where  import Data.Text qualified as T
+ test/HlintExtensionSpec.hs view
@@ -0,0 +1,31 @@+module HlintExtensionSpec (spec) where++import Data.Text qualified as T+import Himari+import Test.Syd++spec :: Spec+spec = do+  describe "hlint extension restriction rules" . beforeAll runHlintOnSample $ do+    describe "Dangerous extensions" $ do+      itWithOuter "AllowAmbiguousTypes should warn" $ \output -> do+        output `shouldSatisfy` containsWarning "AllowAmbiguousTypes"++    describe "Discouraged extensions" $ do+      itWithOuter "ImplicitParams should warn" $ \output -> do+        output `shouldSatisfy` containsWarning "ImplicitParams"++      itWithOuter "UndecidableInstances should warn" $ \output -> do+        output `shouldSatisfy` containsWarning "UndecidableInstances"++runHlintOnSample :: IO Text+runHlintOnSample = do+  (exitCode, stdoutOutput, stderrOutput) <-+    readProcess $+      proc "hlint" ["test/HlintSamples/ExtensionDangerous.hs"]+  pure $ case exitCode of+    ExitSuccess -> convert stdoutOutput+    ExitFailure _ -> convert stdoutOutput <> convert stderrOutput++containsWarning :: Text -> Text -> Bool+containsWarning expectedMsg output = expectedMsg `T.isInfixOf` output
+ test/HlintSamples/ExtensionDangerous.hs view
@@ -0,0 +1,24 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ImplicitParams #-}+{-# LANGUAGE UndecidableInstances #-}++-- Sample file to test extension restriction hlint rules+-- This file intentionally uses dangerous and discouraged extensions+module HlintSamples.ExtensionDangerous where++import Himari++-- AllowAmbiguousTypes example+class AmbiguousClass a where+  ambiguousMethod :: Int++-- ImplicitParams example+implicitParamsExample :: (?x :: Int) => Int+implicitParamsExample = ?x + 1++-- UndecidableInstances example (combined with FlexibleInstances from GHC2024)+class ShowWrapper a where+  showWrapper :: a -> Text++instance (Show a) => ShowWrapper a where+  showWrapper = convert . show
test/HlintUnliftioSpec.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE OverloadedStrings #-}- module HlintUnliftioSpec (spec) where  import Data.Text qualified as T
test/Main.hs view
@@ -5,6 +5,7 @@ import Himari.Env.SimpleSpec qualified as SimpleSpec import Himari.Prelude.FunctorSpec qualified as FunctorSpec import HlintBaseSpec qualified+import HlintExtensionSpec qualified import HlintUnliftioSpec qualified import Test.Syd import TitleSpec qualified@@ -17,3 +18,4 @@   describe "Prelude.Functor" FunctorSpec.spec   describe "HlintUnliftio" HlintUnliftioSpec.spec   describe "HlintBase" HlintBaseSpec.spec+  describe "HlintExtension" HlintExtensionSpec.spec
test/TitleSpec.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE OverloadedStrings #-}- module TitleSpec (spec) where  import Data.List.NonEmpty qualified as NE