diff --git a/beeline-examples/beeline-examples.cabal b/beeline-examples/beeline-examples.cabal index d476098..02131d7 100644 --- a/beeline-examples/beeline-examples.cabal +++ b/beeline-examples/beeline-examples.cabal @@ -39,11 +39,7 @@ library , shrubbery >=0.1 && <0.3 default-language: Haskell2010 if flag(ci) - ghc-options: -O2 -Wall -Werror -Wcompat -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages - if impl (ghc >= 9.0) - ghc-options: -Winvalid-haddock - if impl (ghc >= 9.2) - ghc-options: -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns + ghc-options: -O2 -Wall -Werror -Wcompat -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages -Winvalid-haddock -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns if impl (ghc >= 9.4) ghc-options: -Wredundant-strictness-flags if impl (ghc >= 9.8) diff --git a/beeline-examples/package.yaml b/beeline-examples/package.yaml index d155a7c..918c510 100644 --- a/beeline-examples/package.yaml +++ b/beeline-examples/package.yaml @@ -40,15 +40,11 @@ when: - -Wmissing-export-lists - -Wpartial-fields - -Wunused-packages + - -Winvalid-haddock + - -Wimplicit-lift + - -Woperator-whitespace + - -Wredundant-bang-patterns when: - - condition: impl (ghc >= 9.0) - ghc-options: - - -Winvalid-haddock - - condition: impl (ghc >= 9.2) - ghc-options: - - -Wimplicit-lift - - -Woperator-whitespace - - -Wredundant-bang-patterns - condition: impl (ghc >= 9.4) ghc-options: - -Wredundant-strictness-flags diff --git a/beeline-http-client/beeline-http-client.cabal b/beeline-http-client/beeline-http-client.cabal index 5fcabc2..f494363 100644 --- a/beeline-http-client/beeline-http-client.cabal +++ b/beeline-http-client/beeline-http-client.cabal @@ -16,7 +16,7 @@ license: MIT license-file: LICENSE build-type: Simple tested-with: - GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 + GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 source-repository head type: git @@ -42,7 +42,7 @@ library src build-depends: base >=4.7 && <5 - , beeline-params ==0.1.* + , beeline-params >=0.1 && <0.3 , beeline-routing ==0.3.* , bytestring >=0.10 && <0.13 , containers >=0.6 && <0.9 @@ -52,11 +52,7 @@ library , text >=1.2 && <2.2 default-language: Haskell2010 if flag(ci) - ghc-options: -O2 -Wall -Werror -Wcompat -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages - if impl (ghc >= 9.0) - ghc-options: -Winvalid-haddock - if impl (ghc >= 9.2) - ghc-options: -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns + ghc-options: -O2 -Wall -Werror -Wcompat -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages -Winvalid-haddock -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns if impl (ghc >= 9.4) ghc-options: -Wredundant-strictness-flags if impl (ghc >= 9.6) @@ -79,7 +75,7 @@ test-suite beeline-http-client-test build-depends: base >=4.7 && <5 , beeline-http-client - , beeline-params ==0.1.* + , beeline-params >=0.1 && <0.3 , beeline-routing ==0.3.* , bytestring >=0.10 && <0.13 , hedgehog @@ -91,11 +87,7 @@ test-suite beeline-http-client-test , warp >=3.3 && <3.5 default-language: Haskell2010 if flag(ci) - ghc-options: -O2 -Wall -Werror -Wcompat -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages - if impl (ghc >= 9.0) - ghc-options: -Winvalid-haddock - if impl (ghc >= 9.2) - ghc-options: -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns + ghc-options: -O2 -Wall -Werror -Wcompat -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages -Winvalid-haddock -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns if impl (ghc >= 9.4) ghc-options: -Wredundant-strictness-flags if impl (ghc >= 9.6) diff --git a/beeline-http-client/henforcer.toml b/beeline-http-client/henforcer.toml deleted file mode 100644 index d0103ab..0000000 --- a/beeline-http-client/henforcer.toml +++ /dev/null @@ -1,22 +0,0 @@ -[forAnyModule] -allowedOpenUnaliasedImports = 1 -#maximumExportsPlusHeaderUndocumented = 1 -minimumExportsPlusHeaderDocumented = 0 -#maximumExportsWithoutSince = 1 -minimumExportsWithSince = 0 -moduleHeaderCopyrightMustExistNonEmpty = true -moduleHeaderDescriptionMustExistNonEmpty = false -moduleHeaderLicenseMustExistNonEmpty = true -moduleHeaderMaintainerMustExistNonEmpty = false -[[forPatternModules]] -pattern = "Paths_*" -[forPatternModules.rulesToIgnore] -all = true -[[forPatternModules]] -pattern = "Test.*" -[forPatternModules.rulesToIgnore] -all = true -[[forSpecifiedModules]] -module = "Main" -[forSpecifiedModules.rulesToIgnore] -all = true \ No newline at end of file diff --git a/beeline-http-client/henforcer.toml b/beeline-http-client/henforcer.toml new file mode 120000 index 0000000..f9cbe86 --- /dev/null +++ b/beeline-http-client/henforcer.toml @@ -0,0 +1 @@ +../henforcer.toml \ No newline at end of file diff --git a/beeline-http-client/package.yaml b/beeline-http-client/package.yaml index 7da8dac..8cf621a 100644 --- a/beeline-http-client/package.yaml +++ b/beeline-http-client/package.yaml @@ -16,7 +16,7 @@ license-file: LICENSE # common to point users to the README.md file. description: Please see the README on GitHub at tested-with: - GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 + GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 flags: ci: description: More strict ghc options used for development and ci, not intended for end-use. @@ -36,15 +36,11 @@ when: - -Wmissing-export-lists - -Wpartial-fields - -Wunused-packages + - -Winvalid-haddock + - -Wimplicit-lift + - -Woperator-whitespace + - -Wredundant-bang-patterns when: - - condition: impl (ghc >= 9.0) - ghc-options: - - -Winvalid-haddock - - condition: impl (ghc >= 9.2) - ghc-options: - - -Wimplicit-lift - - -Woperator-whitespace - - -Wredundant-bang-patterns - condition: impl (ghc >= 9.4) ghc-options: - -Wredundant-strictness-flags @@ -71,7 +67,7 @@ library: - Beeline.HTTP.Client.Operation dependencies: - base >= 4.7 && < 5 - - beeline-params >= 0.1 && < 0.2 + - beeline-params >= 0.1 && < 0.3 - beeline-routing >= 0.3 && < 0.4 - bytestring >= 0.10 && < 0.13 - containers >= 0.6 && < 0.9 @@ -96,7 +92,7 @@ tests: dependencies: - base >= 4.7 && < 5 - beeline-http-client - - beeline-params >= 0.1 && < 0.2 + - beeline-params >= 0.1 && < 0.3 - beeline-routing >= 0.3 && < 0.4 - bytestring >= 0.10 && < 0.13 - hedgehog diff --git a/beeline-params/beeline-params.cabal b/beeline-params/beeline-params.cabal index a18a798..80769bb 100644 --- a/beeline-params/beeline-params.cabal +++ b/beeline-params/beeline-params.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: beeline-params -version: 0.1.0.1 +version: 0.2.0.0 description: Please see the README on GitHub at homepage: https://github.com/flipstone/beeline#readme bug-reports: https://github.com/flipstone/beeline/issues @@ -16,7 +16,7 @@ license: MIT license-file: LICENSE build-type: Simple tested-with: - GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 + GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 source-repository head type: git @@ -38,27 +38,24 @@ library Beeline.Params.QuerySchema other-modules: Beeline.Params.Internal.ParamLookup - Paths_beeline_params hs-source-dirs: src build-depends: attoparsec >=0.13 && <0.15 , base >=4.7 && <5 + , bounded-text >=0.1.1 && <0.2 , bytestring >=0.10 && <0.13 , case-insensitive ==1.2.* , containers >=0.6 && <0.9 , cookie >=0.4 && <0.6 , dlist ==1.0.* , http-types ==0.12.* + , non-empty-text ==0.2.* , scientific ==0.3.* , text >=1.2 && <2.2 default-language: Haskell2010 if flag(ci) - ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages - if impl (ghc >= 9.0) - ghc-options: -Winvalid-haddock - if impl (ghc >= 9.2) - ghc-options: -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns + ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages -Winvalid-haddock -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns if impl (ghc >= 9.4) ghc-options: -Wredundant-strictness-flags if impl (ghc >= 9.6) @@ -74,8 +71,10 @@ test-suite beeline-params-test type: exitcode-stdio-1.0 main-is: Main.hs other-modules: + Test.BoundedTextParam Test.CookieSchema Test.HeaderSchema + Test.NonEmptyTextParam Test.ParameterDefinition Test.QuerySchema Paths_beeline_params @@ -84,19 +83,17 @@ test-suite beeline-params-test build-depends: base , beeline-params + , bounded-text , bytestring , cookie , hedgehog , http-types + , non-empty-text , scientific ==0.3.* , text default-language: Haskell2010 if flag(ci) - ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages - if impl (ghc >= 9.0) - ghc-options: -Winvalid-haddock - if impl (ghc >= 9.2) - ghc-options: -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns + ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages -Winvalid-haddock -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns if impl (ghc >= 9.4) ghc-options: -Wredundant-strictness-flags if impl (ghc >= 9.6) diff --git a/beeline-params/henforcer.toml b/beeline-params/henforcer.toml deleted file mode 100644 index c130084..0000000 --- a/beeline-params/henforcer.toml +++ /dev/null @@ -1,22 +0,0 @@ -[forAnyModule] -allowedOpenUnaliasedImports = 1 -#maximumExportsPlusHeaderUndocumented = 1 -minimumExportsPlusHeaderDocumented = 0 -#maximumExportsWithoutSince = 1 -minimumExportsWithSince = 0 -moduleHeaderCopyrightMustExistNonEmpty = true -moduleHeaderDescriptionMustExistNonEmpty = false -moduleHeaderLicenseMustExistNonEmpty = true -moduleHeaderMaintainerMustExistNonEmpty = false -[[forPatternModules]] -pattern = "Paths_*" -[forPatternModules.rulesToIgnore] -all = true -[[forPatternModules]] -pattern = "Test.*" -[forPatternModules.rulesToIgnore] -all = true -[[forSpecifiedModules]] -module = "Main" -[forSpecifiedModules.rulesToIgnore] -all = true diff --git a/beeline-params/henforcer.toml b/beeline-params/henforcer.toml new file mode 120000 index 0000000..f9cbe86 --- /dev/null +++ b/beeline-params/henforcer.toml @@ -0,0 +1 @@ +../henforcer.toml \ No newline at end of file diff --git a/beeline-params/package.yaml b/beeline-params/package.yaml index b4e7dd4..2af50da 100644 --- a/beeline-params/package.yaml +++ b/beeline-params/package.yaml @@ -1,5 +1,5 @@ name: beeline-params -version: 0.1.0.1 +version: 0.2.0.0 github: "flipstone/beeline/beeline-params" author: Flipstone Technology Partners maintainer: development@flipstone.com @@ -9,7 +9,7 @@ license-file: LICENSE description: Please see the README on GitHub at tested-with: - GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 + GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 flags: ci: @@ -32,15 +32,11 @@ when: - -Wmissing-export-lists - -Wpartial-fields - -Wunused-packages + - -Winvalid-haddock + - -Wimplicit-lift + - -Woperator-whitespace + - -Wredundant-bang-patterns when: - - condition: impl (ghc >= 9.0) - ghc-options: - - -Winvalid-haddock - - condition: impl (ghc >= 9.2) - ghc-options: - - -Wimplicit-lift - - -Woperator-whitespace - - -Wredundant-bang-patterns - condition: impl (ghc >= 9.4) ghc-options: - -Wredundant-strictness-flags @@ -78,6 +74,10 @@ library: - http-types >= 0.12 && < 0.13 - scientific >= 0.3 && < 0.4 - text >= 1.2 && < 2.2 + - bounded-text >= 0.1.1 && < 0.2 + - non-empty-text >= 0.2 && < 0.3 + other-modules: + - Beeline.Params.Internal.ParamLookup tests: beeline-params-test: @@ -92,6 +92,8 @@ tests: - cookie - scientific >= 0.3 && < 0.4 - text + - bounded-text + - non-empty-text when: - condition: flag(ci) ghc-options: diff --git a/beeline-params/src/Beeline/Params/ParameterDefinition.hs b/beeline-params/src/Beeline/Params/ParameterDefinition.hs index e5f6a42..3e46b6e 100644 --- a/beeline-params/src/Beeline/Params/ParameterDefinition.hs +++ b/beeline-params/src/Beeline/Params/ParameterDefinition.hs @@ -1,3 +1,8 @@ +{-# LANGUAGE AllowAmbiguousTypes #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TypeApplications #-} + {- | Copyright : Flipstone Technology Partners 2021-2025 License : MIT @@ -8,6 +13,8 @@ module Beeline.Params.ParameterDefinition ( ParameterDefinition (..) , ParameterType (..) , textParam + , boundedTextParam + , nonEmptyTextParam , integralParam , integerParam , intParam @@ -30,10 +37,12 @@ import Control.Monad ((<=<)) import qualified Data.Attoparsec.Text as Atto import qualified Data.Bifunctor as Bifunctor import Data.Bool (bool) +import qualified Data.BoundedText as BT import Data.Coerce (Coercible, coerce) import Data.Functor (($>)) import Data.Int (Int16, Int32, Int64, Int8) import qualified Data.Map.Strict as Map +import qualified Data.NonEmptyText as NET import Data.Scientific (Scientific, fromFloatDigits, toRealFloat) import Data.Text (Text) import qualified Data.Text as T @@ -41,11 +50,14 @@ import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy.Builder as LTB import qualified Data.Text.Lazy.Builder.Int as LTBI import qualified Data.Text.Lazy.Builder.RealFloat as LTBF +import GHC.TypeLits (KnownNat) data ParameterDefinition param = ParameterDefinition { parameterName :: Text , parameterType :: ParameterType , parameterFormat :: Maybe Text + , parameterMinLength :: Maybe Word + , parameterMaxLength :: Maybe Word , parameterParser :: Text -> Either Text param , parameterRenderer :: param -> Text } @@ -69,6 +81,8 @@ textParam name = { parameterName = name , parameterType = ParameterString , parameterFormat = Nothing + , parameterMinLength = Nothing + , parameterMaxLength = Nothing , parameterParser = Right , parameterRenderer = id } @@ -188,6 +202,8 @@ parsedParam paramType format attoParser renderer name = { parameterName = name , parameterType = paramType , parameterFormat = format + , parameterMinLength = Nothing + , parameterMaxLength = Nothing , parameterParser = parser , parameterRenderer = renderer } @@ -204,3 +220,57 @@ convertParam format parse render paramDef = , parameterParser = parse <=< parameterParser paramDef , parameterRenderer = parameterRenderer paramDef . render } + +-- | @since 0.2.0.0 +boundedTextParam :: + forall minLen maxLen. + (KnownNat minLen, KnownNat maxLen) => + Text -> + ParameterDefinition (BT.BoundedText minLen maxLen) +boundedTextParam name = + let + minVal = BT.boundedTextMinLength @(BT.BoundedText minLen maxLen) + maxVal = BT.boundedTextMaxLength @(BT.BoundedText minLen maxLen) + in + ParameterDefinition + { parameterName = name + , parameterType = ParameterString + , parameterFormat = Nothing + , parameterMinLength = Just (fromIntegral minVal) + , parameterMaxLength = Just (fromIntegral maxVal) + , parameterParser = parseBoundedText + , parameterRenderer = BT.boundedTextToText + } + +parseBoundedText :: + forall minLen maxLen. + (KnownNat minLen, KnownNat maxLen) => + Text -> + Either Text (BT.BoundedText minLen maxLen) +parseBoundedText text = + case BT.boundedTextFromText text of + Right bt -> Right bt + Left err -> Left (T.pack (BT.describeBoundedTextError err)) + +-- | @since 0.2.0.0 +nonEmptyTextParam :: + Text -> + ParameterDefinition NET.NonEmptyText +nonEmptyTextParam name = + ParameterDefinition + { parameterName = name + , parameterType = ParameterString + , parameterFormat = Nothing + , parameterMinLength = Just 1 + , parameterMaxLength = Nothing + , parameterParser = parseNonEmptyText + , parameterRenderer = NET.toText + } + +parseNonEmptyText :: + Text -> + Either Text NET.NonEmptyText +parseNonEmptyText text = + case NET.fromText text of + Just net -> Right net + Nothing -> Left (T.pack "Text must not be empty") diff --git a/beeline-params/test/Main.hs b/beeline-params/test/Main.hs index bf96dc6..2fc8f45 100644 --- a/beeline-params/test/Main.hs +++ b/beeline-params/test/Main.hs @@ -4,15 +4,19 @@ module Main import qualified Hedgehog.Main as HHM +import qualified Test.BoundedTextParam as BoundedTextParam import qualified Test.CookieSchema as CookieSchema import qualified Test.HeaderSchema as HeaderSchema +import qualified Test.NonEmptyTextParam as NonEmptyTextParam import qualified Test.ParameterDefinition as ParameterDefinition import qualified Test.QuerySchema as QuerySchema main :: IO () main = HHM.defaultMain - [ ParameterDefinition.tests + [ BoundedTextParam.tests + , NonEmptyTextParam.tests + , ParameterDefinition.tests , QuerySchema.tests , CookieSchema.tests , HeaderSchema.tests diff --git a/beeline-params/test/Test/BoundedTextParam.hs b/beeline-params/test/Test/BoundedTextParam.hs new file mode 100644 index 0000000..4ab5f38 --- /dev/null +++ b/beeline-params/test/Test/BoundedTextParam.hs @@ -0,0 +1,68 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeApplications #-} + +module Test.BoundedTextParam + ( tests + ) where + +import qualified Data.BoundedText as BT +import qualified Hedgehog as HH +import qualified Hedgehog.Gen as Gen +import qualified Hedgehog.Range as Range + +import qualified Beeline.Params as P + +tests :: IO Bool +tests = + HH.checkParallel $ + HH.Group + "BoundedTextParam" + [ ("prop_boundedTextParamRoundTrip", prop_boundedTextParamRoundTrip) + , ("prop_boundedTextParamMinLength", prop_boundedTextParamMinLength) + , ("prop_boundedTextParamMaxLength", prop_boundedTextParamMaxLength) + , ("prop_boundedTextParamRejectsTooShort", prop_boundedTextParamRejectsTooShort) + , ("prop_boundedTextParamRejectsTooLong", prop_boundedTextParamRejectsTooLong) + ] + +prop_boundedTextParamRoundTrip :: HH.Property +prop_boundedTextParamRoundTrip = + let + paramDef = P.boundedTextParam @3 @10 "foo" + in + HH.property $ do + text <- HH.forAll (Gen.text (Range.linear 3 10) Gen.unicodeAll) + case BT.boundedTextFromText @3 @10 text of + Left _ -> pure () + Right bt -> + HH.tripping bt (P.parameterRenderer paramDef) (P.parameterParser paramDef) + +prop_boundedTextParamMinLength :: HH.Property +prop_boundedTextParamMinLength = + HH.withTests 1 . HH.property $ do + let + paramDef = P.boundedTextParam @3 @10 "foo" + P.parameterMinLength paramDef HH.=== Just 3 + +prop_boundedTextParamMaxLength :: HH.Property +prop_boundedTextParamMaxLength = + HH.withTests 1 . HH.property $ do + let + paramDef = P.boundedTextParam @3 @10 "foo" + P.parameterMaxLength paramDef HH.=== Just 10 + +prop_boundedTextParamRejectsTooShort :: HH.Property +prop_boundedTextParamRejectsTooShort = + HH.property $ do + text <- HH.forAll (Gen.text (Range.linear 0 2) Gen.unicodeAll) + case P.parameterParser (P.boundedTextParam @3 @10 "foo") text of + Left _ -> HH.success + Right _ -> HH.failure + +prop_boundedTextParamRejectsTooLong :: HH.Property +prop_boundedTextParamRejectsTooLong = + HH.property $ do + text <- HH.forAll (Gen.text (Range.linear 11 20) Gen.unicodeAll) + case P.parameterParser (P.boundedTextParam @3 @10 "foo") text of + Left _ -> HH.success + Right _ -> HH.failure diff --git a/beeline-params/test/Test/NonEmptyTextParam.hs b/beeline-params/test/Test/NonEmptyTextParam.hs new file mode 100644 index 0000000..a70d08c --- /dev/null +++ b/beeline-params/test/Test/NonEmptyTextParam.hs @@ -0,0 +1,56 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Test.NonEmptyTextParam + ( tests + ) where + +import qualified Data.NonEmptyText as NET +import qualified Hedgehog as HH +import qualified Hedgehog.Gen as Gen +import qualified Hedgehog.Range as Range + +import qualified Beeline.Params as P + +tests :: IO Bool +tests = + HH.checkParallel $ + HH.Group + "NonEmptyTextParam" + [ ("prop_nonEmptyTextParamRoundTrip", prop_nonEmptyTextParamRoundTrip) + , ("prop_nonEmptyTextParamMinLength", prop_nonEmptyTextParamMinLength) + , ("prop_nonEmptyTextParamMaxLength", prop_nonEmptyTextParamMaxLength) + , ("prop_nonEmptyTextParamRejectsEmpty", prop_nonEmptyTextParamRejectsEmpty) + ] + +prop_nonEmptyTextParamRoundTrip :: HH.Property +prop_nonEmptyTextParamRoundTrip = + let + paramDef = P.nonEmptyTextParam "foo" + in + HH.property $ do + text <- HH.forAll (Gen.text (Range.linear 1 100) Gen.unicodeAll) + case NET.fromText text of + Nothing -> pure () + Just net -> + HH.tripping net (P.parameterRenderer paramDef) (P.parameterParser paramDef) + +prop_nonEmptyTextParamMinLength :: HH.Property +prop_nonEmptyTextParamMinLength = + HH.withTests 1 . HH.property $ do + let + paramDef = P.nonEmptyTextParam "foo" + P.parameterMinLength paramDef HH.=== Just 1 + +prop_nonEmptyTextParamMaxLength :: HH.Property +prop_nonEmptyTextParamMaxLength = + HH.withTests 1 . HH.property $ do + let + paramDef = P.nonEmptyTextParam "foo" + P.parameterMaxLength paramDef HH.=== Nothing + +prop_nonEmptyTextParamRejectsEmpty :: HH.Property +prop_nonEmptyTextParamRejectsEmpty = + HH.withTests 1 . HH.property $ do + case P.parameterParser (P.nonEmptyTextParam "foo") "" of + Left _ -> HH.success + Right _ -> HH.failure diff --git a/beeline-routing/beeline-routing.cabal b/beeline-routing/beeline-routing.cabal index c581332..c1813ad 100644 --- a/beeline-routing/beeline-routing.cabal +++ b/beeline-routing/beeline-routing.cabal @@ -16,7 +16,7 @@ license: MIT license-file: LICENSE build-type: Simple tested-with: - GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 + GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 source-repository head type: git @@ -41,18 +41,14 @@ library src build-depends: base >=4.7 && <5 - , beeline-params ==0.1.* + , beeline-params >=0.1 && <0.3 , dlist ==1.0.* , http-types ==0.12.* , shrubbery >=0.1 && <0.3 , text >=1.2 && <2.2 default-language: Haskell2010 if flag(ci) - ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages - if impl (ghc >= 9.0) - ghc-options: -Winvalid-haddock - if impl (ghc >= 9.2) - ghc-options: -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns + ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages -Winvalid-haddock -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns if impl (ghc >= 9.4) ghc-options: -Wredundant-strictness-flags if impl (ghc >= 9.6) @@ -87,11 +83,7 @@ test-suite beeline-routing-test , text default-language: Haskell2010 if flag(ci) - ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages - if impl (ghc >= 9.0) - ghc-options: -Winvalid-haddock - if impl (ghc >= 9.2) - ghc-options: -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns + ghc-options: -O2 -Wall -Werror -Wcompat -fwrite-ide-info -hiedir=.hie -Widentities -Wmissed-specialisations -Wmissing-local-signatures -Wmissing-export-lists -Wpartial-fields -Wunused-packages -Winvalid-haddock -Wimplicit-lift -Woperator-whitespace -Wredundant-bang-patterns if impl (ghc >= 9.4) ghc-options: -Wredundant-strictness-flags if impl (ghc >= 9.6) diff --git a/beeline-routing/henforcer.toml b/beeline-routing/henforcer.toml deleted file mode 100644 index e69f309..0000000 --- a/beeline-routing/henforcer.toml +++ /dev/null @@ -1,26 +0,0 @@ -[forAnyModule] -allowedOpenUnaliasedImports = 1 -#maximumExportsPlusHeaderUndocumented = 1 -minimumExportsPlusHeaderDocumented = 0 -#maximumExportsWithoutSince = 1 -minimumExportsWithSince = 0 -moduleHeaderCopyrightMustExistNonEmpty = true -moduleHeaderDescriptionMustExistNonEmpty = false -moduleHeaderLicenseMustExistNonEmpty = true -moduleHeaderMaintainerMustExistNonEmpty = false -[[forPatternModules]] -pattern = "Paths_*" -[forPatternModules.rulesToIgnore] -all = true -[[forPatternModules]] -pattern = "Fixtures.*" -[forPatternModules.rulesToIgnore] -all = true -[[forPatternModules]] -pattern = "Test.*" -[forPatternModules.rulesToIgnore] -all = true -[[forSpecifiedModules]] -module = "Main" -[forSpecifiedModules.rulesToIgnore] -all = true \ No newline at end of file diff --git a/beeline-routing/henforcer.toml b/beeline-routing/henforcer.toml new file mode 120000 index 0000000..f9cbe86 --- /dev/null +++ b/beeline-routing/henforcer.toml @@ -0,0 +1 @@ +../henforcer.toml \ No newline at end of file diff --git a/beeline-routing/package.yaml b/beeline-routing/package.yaml index 3cf8e25..0fd0015 100644 --- a/beeline-routing/package.yaml +++ b/beeline-routing/package.yaml @@ -9,7 +9,7 @@ copyright: 2025 Flipstone Technology Partners description: Please see the README on GitHub at tested-with: - GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 + GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1 flags: ci: @@ -32,15 +32,11 @@ when: - -Wmissing-export-lists - -Wpartial-fields - -Wunused-packages + - -Winvalid-haddock + - -Wimplicit-lift + - -Woperator-whitespace + - -Wredundant-bang-patterns when: - - condition: impl (ghc >= 9.0) - ghc-options: - - -Winvalid-haddock - - condition: impl (ghc >= 9.2) - ghc-options: - - -Wimplicit-lift - - -Woperator-whitespace - - -Wredundant-bang-patterns - condition: impl (ghc >= 9.4) ghc-options: - -Wredundant-strictness-flags @@ -68,7 +64,7 @@ library: - Beeline.Routing.RouteRecognizer dependencies: - base >= 4.7 && < 5 - - beeline-params >= 0.1 && < 0.2 + - beeline-params >= 0.1 && < 0.3 - dlist >= 1.0 && < 1.1 - http-types >= 0.12 && < 0.13 - shrubbery >= 0.1 && < 0.3 diff --git a/henforcer.toml b/henforcer.toml new file mode 100644 index 0000000..e69f309 --- /dev/null +++ b/henforcer.toml @@ -0,0 +1,26 @@ +[forAnyModule] +allowedOpenUnaliasedImports = 1 +#maximumExportsPlusHeaderUndocumented = 1 +minimumExportsPlusHeaderDocumented = 0 +#maximumExportsWithoutSince = 1 +minimumExportsWithSince = 0 +moduleHeaderCopyrightMustExistNonEmpty = true +moduleHeaderDescriptionMustExistNonEmpty = false +moduleHeaderLicenseMustExistNonEmpty = true +moduleHeaderMaintainerMustExistNonEmpty = false +[[forPatternModules]] +pattern = "Paths_*" +[forPatternModules.rulesToIgnore] +all = true +[[forPatternModules]] +pattern = "Fixtures.*" +[forPatternModules.rulesToIgnore] +all = true +[[forPatternModules]] +pattern = "Test.*" +[forPatternModules.rulesToIgnore] +all = true +[[forSpecifiedModules]] +module = "Main" +[forSpecifiedModules.rulesToIgnore] +all = true \ No newline at end of file diff --git a/stack-ghc-8.10.yaml b/stack-ghc-8.10.yaml deleted file mode 100644 index 32d1172..0000000 --- a/stack-ghc-8.10.yaml +++ /dev/null @@ -1,7 +0,0 @@ -<<: !include stack-base.yaml - -resolver: lts-18.28 - -extra-deps: - - github: flipstone/shrubbery - commit: 6dd2236be034f691bd6663d03961750af603c616 diff --git a/stack-ghc-8.10.yaml.lock b/stack-ghc-8.10.yaml.lock deleted file mode 100644 index edf992d..0000000 --- a/stack-ghc-8.10.yaml.lock +++ /dev/null @@ -1,23 +0,0 @@ -# This file was autogenerated by Stack. -# You should not edit this file by hand. -# For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/topics/lock_files - -packages: -- completed: - name: shrubbery - pantry-tree: - sha256: ac1c659511a82f56fd04f9fbbf5e1e154bc99e821aeba6123777ddec5207dc05 - size: 2834 - sha256: 10cfe7d955e86cad2a93ed207d7b4fa2b205aa242785dee0c8df913283adf130 - size: 30352 - url: https://github.com/flipstone/shrubbery/archive/6dd2236be034f691bd6663d03961750af603c616.tar.gz - version: 0.2.3.0 - original: - url: https://github.com/flipstone/shrubbery/archive/6dd2236be034f691bd6663d03961750af603c616.tar.gz -snapshots: -- completed: - sha256: 428ec8d5ce932190d3cbe266b9eb3c175cd81e984babf876b64019e2cbe4ea68 - size: 590100 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/28.yaml - original: lts-18.28 diff --git a/stack-ghc-9.0.yaml b/stack-ghc-9.0.yaml deleted file mode 100644 index b80693d..0000000 --- a/stack-ghc-9.0.yaml +++ /dev/null @@ -1,7 +0,0 @@ -<<: !include stack-base.yaml - -resolver: lts-19.33 - -extra-deps: - - github: flipstone/shrubbery - commit: 6dd2236be034f691bd6663d03961750af603c616 diff --git a/stack-ghc-9.0.yaml.lock b/stack-ghc-9.0.yaml.lock deleted file mode 100644 index c53fad4..0000000 --- a/stack-ghc-9.0.yaml.lock +++ /dev/null @@ -1,23 +0,0 @@ -# This file was autogenerated by Stack. -# You should not edit this file by hand. -# For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/topics/lock_files - -packages: -- completed: - name: shrubbery - pantry-tree: - sha256: ac1c659511a82f56fd04f9fbbf5e1e154bc99e821aeba6123777ddec5207dc05 - size: 2834 - sha256: 10cfe7d955e86cad2a93ed207d7b4fa2b205aa242785dee0c8df913283adf130 - size: 30352 - url: https://github.com/flipstone/shrubbery/archive/6dd2236be034f691bd6663d03961750af603c616.tar.gz - version: 0.2.3.0 - original: - url: https://github.com/flipstone/shrubbery/archive/6dd2236be034f691bd6663d03961750af603c616.tar.gz -snapshots: -- completed: - sha256: 6d1532d40621957a25bad5195bfca7938e8a06d923c91bc52aa0f3c41181f2d4 - size: 619204 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/33.yaml - original: lts-19.33 diff --git a/stack-ghc-9.10.yaml b/stack-ghc-9.10.yaml index 4bdeae9..0f633de 100644 --- a/stack-ghc-9.10.yaml +++ b/stack-ghc-9.10.yaml @@ -8,3 +8,7 @@ extra-deps: - git: https://github.com/flipstone/henforcer.git commit: f3c2b1e461a37e7ff88d795379edd7386bfa8557 - pollock-0.1.0.3 + - github: flipstone/bounded-text + commit: 3ef94eeda5402857423284d0c4e021a8c8032498 + - template-haskell-lift-0.1.0.0 + - template-haskell-quasiquoter-0.1.0.0 diff --git a/stack-ghc-9.10.yaml.lock b/stack-ghc-9.10.yaml.lock index 0ce7819..5c3f642 100644 --- a/stack-ghc-9.10.yaml.lock +++ b/stack-ghc-9.10.yaml.lock @@ -33,6 +33,31 @@ packages: size: 1182 original: hackage: pollock-0.1.0.3 +- completed: + name: bounded-text + pantry-tree: + sha256: e98540b1877ae4709420472f83e8fd04b987eaeb914df72bb33b0bbe55debac2 + size: 2162 + sha256: 29c500737d8e481fe2e3325fe643a9cafc565ffd06b754bf14219f579d927f5d + size: 11885 + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz + version: 0.1.2.0 + original: + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz +- completed: + hackage: template-haskell-lift-0.1.0.0@sha256:f6cd3ee45b0c68480c400bfca9f08f39e8e87a5eb823f206dbe06ab1923a4f1c,1136 + pantry-tree: + sha256: 56ab994094c839bebb643ce5fc58dfae6269517ebe91f380e259adaf1def08bf + size: 243 + original: + hackage: template-haskell-lift-0.1.0.0 +- completed: + hackage: template-haskell-quasiquoter-0.1.0.0@sha256:71027c432c0fb1a293d0f2b1d46dd5be42b9703b7c4b2233ea8076bfc6f84aae,1181 + pantry-tree: + sha256: f9f5177a522cc273c001dd5bd749e4f7ed841910c6136711b9b9825bc0bc9c56 + size: 257 + original: + hackage: template-haskell-quasiquoter-0.1.0.0 snapshots: - completed: sha256: 0d0bb681dd5be9b930c8fc070d717aae757b9aed176ae6047d87624b46406816 diff --git a/stack-ghc-9.2.yaml b/stack-ghc-9.2.yaml index b0a1035..3a4de26 100644 --- a/stack-ghc-9.2.yaml +++ b/stack-ghc-9.2.yaml @@ -5,3 +5,8 @@ resolver: lts-20.26 extra-deps: - github: flipstone/shrubbery commit: 6dd2236be034f691bd6663d03961750af603c616 + - github: flipstone/bounded-text + commit: 3ef94eeda5402857423284d0c4e021a8c8032498 + - template-haskell-lift-0.1.0.0 + - template-haskell-quasiquoter-0.1.0.0 + - non-empty-text-0.2.1 diff --git a/stack-ghc-9.2.yaml.lock b/stack-ghc-9.2.yaml.lock index 1c4c597..ec04b6e 100644 --- a/stack-ghc-9.2.yaml.lock +++ b/stack-ghc-9.2.yaml.lock @@ -15,6 +15,38 @@ packages: version: 0.2.3.0 original: url: https://github.com/flipstone/shrubbery/archive/6dd2236be034f691bd6663d03961750af603c616.tar.gz +- completed: + name: bounded-text + pantry-tree: + sha256: e98540b1877ae4709420472f83e8fd04b987eaeb914df72bb33b0bbe55debac2 + size: 2162 + sha256: 29c500737d8e481fe2e3325fe643a9cafc565ffd06b754bf14219f579d927f5d + size: 11885 + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz + version: 0.1.2.0 + original: + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz +- completed: + hackage: template-haskell-lift-0.1.0.0@sha256:f6cd3ee45b0c68480c400bfca9f08f39e8e87a5eb823f206dbe06ab1923a4f1c,1136 + pantry-tree: + sha256: 56ab994094c839bebb643ce5fc58dfae6269517ebe91f380e259adaf1def08bf + size: 243 + original: + hackage: template-haskell-lift-0.1.0.0 +- completed: + hackage: template-haskell-quasiquoter-0.1.0.0@sha256:71027c432c0fb1a293d0f2b1d46dd5be42b9703b7c4b2233ea8076bfc6f84aae,1181 + pantry-tree: + sha256: f9f5177a522cc273c001dd5bd749e4f7ed841910c6136711b9b9825bc0bc9c56 + size: 257 + original: + hackage: template-haskell-quasiquoter-0.1.0.0 +- completed: + hackage: non-empty-text-0.2.1@sha256:df9629af4ad53af59dc0bfb5995c0500aaa656c884485560e9115152f7495c20,2438 + pantry-tree: + sha256: d8304ffcf168785e1a9d91c9f49bec92eacb43890ad31a48893861ff8de223ed + size: 400 + original: + hackage: non-empty-text-0.2.1 snapshots: - completed: sha256: 5a59b2a405b3aba3c00188453be172b85893cab8ebc352b1ef58b0eae5d248a2 diff --git a/stack-ghc-9.4.yaml b/stack-ghc-9.4.yaml index 7de44fa..a1854f8 100644 --- a/stack-ghc-9.4.yaml +++ b/stack-ghc-9.4.yaml @@ -5,3 +5,8 @@ resolver: lts-21.22 extra-deps: - github: flipstone/shrubbery commit: 6dd2236be034f691bd6663d03961750af603c616 + - github: flipstone/bounded-text + commit: 3ef94eeda5402857423284d0c4e021a8c8032498 + - template-haskell-lift-0.1.0.0 + - template-haskell-quasiquoter-0.1.0.0 + - non-empty-text-0.2.1 diff --git a/stack-ghc-9.4.yaml.lock b/stack-ghc-9.4.yaml.lock index 752e8c0..7a3692f 100644 --- a/stack-ghc-9.4.yaml.lock +++ b/stack-ghc-9.4.yaml.lock @@ -15,6 +15,38 @@ packages: version: 0.2.3.0 original: url: https://github.com/flipstone/shrubbery/archive/6dd2236be034f691bd6663d03961750af603c616.tar.gz +- completed: + name: bounded-text + pantry-tree: + sha256: e98540b1877ae4709420472f83e8fd04b987eaeb914df72bb33b0bbe55debac2 + size: 2162 + sha256: 29c500737d8e481fe2e3325fe643a9cafc565ffd06b754bf14219f579d927f5d + size: 11885 + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz + version: 0.1.2.0 + original: + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz +- completed: + hackage: template-haskell-lift-0.1.0.0@sha256:f6cd3ee45b0c68480c400bfca9f08f39e8e87a5eb823f206dbe06ab1923a4f1c,1136 + pantry-tree: + sha256: 56ab994094c839bebb643ce5fc58dfae6269517ebe91f380e259adaf1def08bf + size: 243 + original: + hackage: template-haskell-lift-0.1.0.0 +- completed: + hackage: template-haskell-quasiquoter-0.1.0.0@sha256:71027c432c0fb1a293d0f2b1d46dd5be42b9703b7c4b2233ea8076bfc6f84aae,1181 + pantry-tree: + sha256: f9f5177a522cc273c001dd5bd749e4f7ed841910c6136711b9b9825bc0bc9c56 + size: 257 + original: + hackage: template-haskell-quasiquoter-0.1.0.0 +- completed: + hackage: non-empty-text-0.2.1@sha256:df9629af4ad53af59dc0bfb5995c0500aaa656c884485560e9115152f7495c20,2438 + pantry-tree: + sha256: d8304ffcf168785e1a9d91c9f49bec92eacb43890ad31a48893861ff8de223ed + size: 400 + original: + hackage: non-empty-text-0.2.1 snapshots: - completed: sha256: afd5ba64ab602cabc2d3942d3d7e7dd6311bc626dcb415b901eaf576cb62f0ea diff --git a/stack-ghc-9.6.yaml b/stack-ghc-9.6.yaml index 1117cc1..a1cf07e 100644 --- a/stack-ghc-9.6.yaml +++ b/stack-ghc-9.6.yaml @@ -10,3 +10,7 @@ extra-deps: - pollock-0.1.0.3 - tomland-1.3.3.3 - validation-selective-0.2.0.0 + - github: flipstone/bounded-text + commit: 3ef94eeda5402857423284d0c4e021a8c8032498 + - template-haskell-lift-0.1.0.0 + - template-haskell-quasiquoter-0.1.0.0 diff --git a/stack-ghc-9.6.yaml.lock b/stack-ghc-9.6.yaml.lock index 00cbbf7..4b5d1eb 100644 --- a/stack-ghc-9.6.yaml.lock +++ b/stack-ghc-9.6.yaml.lock @@ -47,6 +47,31 @@ packages: size: 697 original: hackage: validation-selective-0.2.0.0 +- completed: + name: bounded-text + pantry-tree: + sha256: e98540b1877ae4709420472f83e8fd04b987eaeb914df72bb33b0bbe55debac2 + size: 2162 + sha256: 29c500737d8e481fe2e3325fe643a9cafc565ffd06b754bf14219f579d927f5d + size: 11885 + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz + version: 0.1.2.0 + original: + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz +- completed: + hackage: template-haskell-lift-0.1.0.0@sha256:f6cd3ee45b0c68480c400bfca9f08f39e8e87a5eb823f206dbe06ab1923a4f1c,1136 + pantry-tree: + sha256: 56ab994094c839bebb643ce5fc58dfae6269517ebe91f380e259adaf1def08bf + size: 243 + original: + hackage: template-haskell-lift-0.1.0.0 +- completed: + hackage: template-haskell-quasiquoter-0.1.0.0@sha256:71027c432c0fb1a293d0f2b1d46dd5be42b9703b7c4b2233ea8076bfc6f84aae,1181 + pantry-tree: + sha256: f9f5177a522cc273c001dd5bd749e4f7ed841910c6136711b9b9825bc0bc9c56 + size: 257 + original: + hackage: template-haskell-quasiquoter-0.1.0.0 snapshots: - completed: sha256: 6c5aeace2ca5ecde793a9e0acfaa730ec8f384aa2f6183a2a252f5f9ec55d623 diff --git a/stack-ghc-9.8.yaml b/stack-ghc-9.8.yaml index fa3610c..19c9c10 100644 --- a/stack-ghc-9.8.yaml +++ b/stack-ghc-9.8.yaml @@ -8,3 +8,7 @@ extra-deps: - git: https://github.com/flipstone/henforcer.git commit: f3c2b1e461a37e7ff88d795379edd7386bfa8557 - pollock-0.1.0.3 + - github: flipstone/bounded-text + commit: 3ef94eeda5402857423284d0c4e021a8c8032498 + - template-haskell-lift-0.1.0.0 + - template-haskell-quasiquoter-0.1.0.0 diff --git a/stack-ghc-9.8.yaml.lock b/stack-ghc-9.8.yaml.lock index d3514fa..912f195 100644 --- a/stack-ghc-9.8.yaml.lock +++ b/stack-ghc-9.8.yaml.lock @@ -33,6 +33,31 @@ packages: size: 1182 original: hackage: pollock-0.1.0.3 +- completed: + name: bounded-text + pantry-tree: + sha256: e98540b1877ae4709420472f83e8fd04b987eaeb914df72bb33b0bbe55debac2 + size: 2162 + sha256: 29c500737d8e481fe2e3325fe643a9cafc565ffd06b754bf14219f579d927f5d + size: 11885 + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz + version: 0.1.2.0 + original: + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz +- completed: + hackage: template-haskell-lift-0.1.0.0@sha256:f6cd3ee45b0c68480c400bfca9f08f39e8e87a5eb823f206dbe06ab1923a4f1c,1136 + pantry-tree: + sha256: 56ab994094c839bebb643ce5fc58dfae6269517ebe91f380e259adaf1def08bf + size: 243 + original: + hackage: template-haskell-lift-0.1.0.0 +- completed: + hackage: template-haskell-quasiquoter-0.1.0.0@sha256:71027c432c0fb1a293d0f2b1d46dd5be42b9703b7c4b2233ea8076bfc6f84aae,1181 + pantry-tree: + sha256: f9f5177a522cc273c001dd5bd749e4f7ed841910c6136711b9b9825bc0bc9c56 + size: 257 + original: + hackage: template-haskell-quasiquoter-0.1.0.0 snapshots: - completed: sha256: 9444fadfa30b67a93080254d53872478c087592ad64443e47c546cdcd13149ae diff --git a/stack.yaml.lock b/stack.yaml.lock index 0ce7819..5c3f642 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -33,6 +33,31 @@ packages: size: 1182 original: hackage: pollock-0.1.0.3 +- completed: + name: bounded-text + pantry-tree: + sha256: e98540b1877ae4709420472f83e8fd04b987eaeb914df72bb33b0bbe55debac2 + size: 2162 + sha256: 29c500737d8e481fe2e3325fe643a9cafc565ffd06b754bf14219f579d927f5d + size: 11885 + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz + version: 0.1.2.0 + original: + url: https://github.com/flipstone/bounded-text/archive/3ef94eeda5402857423284d0c4e021a8c8032498.tar.gz +- completed: + hackage: template-haskell-lift-0.1.0.0@sha256:f6cd3ee45b0c68480c400bfca9f08f39e8e87a5eb823f206dbe06ab1923a4f1c,1136 + pantry-tree: + sha256: 56ab994094c839bebb643ce5fc58dfae6269517ebe91f380e259adaf1def08bf + size: 243 + original: + hackage: template-haskell-lift-0.1.0.0 +- completed: + hackage: template-haskell-quasiquoter-0.1.0.0@sha256:71027c432c0fb1a293d0f2b1d46dd5be42b9703b7c4b2233ea8076bfc6f84aae,1181 + pantry-tree: + sha256: f9f5177a522cc273c001dd5bd749e4f7ed841910c6136711b9b9825bc0bc9c56 + size: 257 + original: + hackage: template-haskell-quasiquoter-0.1.0.0 snapshots: - completed: sha256: 0d0bb681dd5be9b930c8fc070d717aae757b9aed176ae6047d87624b46406816