exon 1.4.0.0 → 1.5.0.0
raw patch · 5 files changed
+73/−122 lines, 5 filesdep ~basedep ~flatparsedep ~hedgehogPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, flatparse, hedgehog, incipit-base, tasty, tasty-hedgehog
API changes (from Hackage documentation)
- Exon: [$sel:exonUse:ExonUse] :: ExonUse a -> a
- Exon.Class.Exon: [$sel:exonUse:ExonUse] :: ExonUse a -> a
- Exon.Class.Exon: instance Exon.Class.Exon.ExonBuilder Data.ByteString.Internal.ByteString Data.ByteString.Builder.Internal.Builder
- Exon.Class.ToSegment: instance Data.String.IsString a => Exon.Class.ToSegment.ToSegment Data.ByteString.Internal.ByteString a
+ Exon: intercalate1 :: Exon a => a -> NonEmpty a -> a
+ Exon: intercalateMay :: Exon a => Foldable t => a -> t a -> Maybe a
+ Exon.Class.Exon: exonUse :: ExonUse a -> a
+ Exon.Class.Exon: instance Exon.Class.Exon.ExonBuilder Data.ByteString.Internal.Type.ByteString Data.ByteString.Builder.Internal.Builder
+ Exon.Class.ToSegment: instance Data.String.IsString a => Exon.Class.ToSegment.ToSegment Data.ByteString.Internal.Type.ByteString a
+ Exon.Combinators: intercalate1 :: Exon a => a -> NonEmpty a -> a
+ Exon.Combinators: intercalateMay :: Exon a => Foldable t => a -> t a -> Maybe a
- Exon: intercalate :: Monoid a => Foldable t => a -> t a -> a
+ Exon: intercalate :: Exon a => Monoid a => Foldable t => a -> t a -> a
- Exon.Combinators: intercalate :: Monoid a => Foldable t => a -> t a -> a
+ Exon.Combinators: intercalate :: Exon a => Monoid a => Foldable t => a -> t a -> a
Files
- changelog.md +5/−0
- exon.cabal +30/−111
- lib/Exon.hs +1/−1
- lib/Exon/Class/Exon.hs +4/−1
- lib/Exon/Combinators.hs +33/−9
changelog.md view
@@ -1,3 +1,8 @@+# 1.5.0.0++* Use `exonProcess` for `intercalate`+* Add `intercalate1` for `NonEmpty`+ # 1.2.0.0 * Add class `ExonExpression`, allowing customization of how interpolated expressions are converted to builders.
exon.cabal view
@@ -1,29 +1,29 @@ cabal-version: 2.2 --- This file has been generated from package.yaml by hpack version 0.35.0.+-- This file has been generated from package.yaml by hpack version 0.35.2. -- -- see: https://github.com/sol/hpack name: exon-version: 1.4.0.0-synopsis: Customizable Quasiquote Interpolation+version: 1.5.0.0+synopsis: Customizable quasiquote interpolation description: See https://hackage.haskell.org/package/exon/docs/Exon.html category: String-homepage: https://git.tryp.io/tek/exon+homepage: https://github.com/tek/exon#readme bug-reports: https://github.com/tek/exon/issues author: Torsten Schmits maintainer: hackage@tryp.io-copyright: 2022 Torsten Schmits+copyright: 2023 Torsten Schmits license: BSD-2-Clause-Patent license-file: LICENSE build-type: Simple extra-source-files:- changelog.md readme.md+ changelog.md source-repository head type: git- location: https://git.tryp.io/tek/exon+ location: https://github.com/tek/exon library exposed-modules:@@ -44,80 +44,53 @@ default-extensions: AllowAmbiguousTypes ApplicativeDo- BangPatterns- BinaryLiterals BlockArguments- ConstraintKinds DataKinds DefaultSignatures DeriveAnyClass- DeriveDataTypeable- DeriveFoldable- DeriveFunctor- DeriveGeneric- DeriveLift- DeriveTraversable DerivingStrategies DerivingVia DisambiguateRecordFields- DoAndIfThenElse DuplicateRecordFields- EmptyCase- EmptyDataDecls- ExistentialQuantification- FlexibleContexts- FlexibleInstances FunctionalDependencies GADTs- GeneralizedNewtypeDeriving- InstanceSigs- KindSignatures LambdaCase LiberalTypeSynonyms- MultiParamTypeClasses MultiWayIf- NamedFieldPuns OverloadedLabels OverloadedLists OverloadedStrings PackageImports PartialTypeSignatures- PatternGuards PatternSynonyms- PolyKinds QuantifiedConstraints QuasiQuotes- RankNTypes RecordWildCards RecursiveDo RoleAnnotations- ScopedTypeVariables- StandaloneDeriving TemplateHaskell- TupleSections- TypeApplications TypeFamilies TypeFamilyDependencies- TypeOperators- TypeSynonymInstances UndecidableInstances UnicodeSyntax ViewPatterns- ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages+ OverloadedRecordDot+ NoFieldSelectors+ ghc-options: -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages build-depends:- base >=4.12 && <5- , flatparse ==0.4.*+ base ==4.*+ , flatparse >=0.4 && <0.6 , generics-sop >=0.5.1.1 && <0.6 , ghc-hs-meta ==0.1.*- , incipit-base ==0.5.*+ , incipit-base >=0.4 && <0.6 , template-haskell mixins: base hiding (Prelude) , incipit-base (IncipitBase as Prelude) , incipit-base hiding (IncipitBase)- default-language: Haskell2010+ default-language: GHC2021 -test-suite exon-unit+test-suite exon-test type: exitcode-stdio-1.0 main-is: Main.hs other-modules:@@ -132,79 +105,52 @@ default-extensions: AllowAmbiguousTypes ApplicativeDo- BangPatterns- BinaryLiterals BlockArguments- ConstraintKinds DataKinds DefaultSignatures DeriveAnyClass- DeriveDataTypeable- DeriveFoldable- DeriveFunctor- DeriveGeneric- DeriveLift- DeriveTraversable DerivingStrategies DerivingVia DisambiguateRecordFields- DoAndIfThenElse DuplicateRecordFields- EmptyCase- EmptyDataDecls- ExistentialQuantification- FlexibleContexts- FlexibleInstances FunctionalDependencies GADTs- GeneralizedNewtypeDeriving- InstanceSigs- KindSignatures LambdaCase LiberalTypeSynonyms- MultiParamTypeClasses MultiWayIf- NamedFieldPuns OverloadedLabels OverloadedLists OverloadedStrings PackageImports PartialTypeSignatures- PatternGuards PatternSynonyms- PolyKinds QuantifiedConstraints QuasiQuotes- RankNTypes RecordWildCards RecursiveDo RoleAnnotations- ScopedTypeVariables- StandaloneDeriving TemplateHaskell- TupleSections- TypeApplications TypeFamilies TypeFamilyDependencies- TypeOperators- TypeSynonymInstances UndecidableInstances UnicodeSyntax ViewPatterns- ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages -threaded -rtsopts -with-rtsopts=-N+ OverloadedRecordDot+ NoFieldSelectors+ ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages build-depends:- base >=4.12 && <5+ base ==4.* , exon- , hedgehog- , incipit-base ==0.5.*- , tasty- , tasty-hedgehog+ , hedgehog >=1.1 && <1.3+ , incipit-base >=0.4 && <0.6+ , tasty ==1.4.*+ , tasty-hedgehog >=1.3 && <1.5 , template-haskell mixins: base hiding (Prelude) , incipit-base (IncipitBase as Prelude) , incipit-base hiding (IncipitBase)- default-language: Haskell2010+ default-language: GHC2021 benchmark exon-bench type: exitcode-stdio-1.0@@ -214,73 +160,46 @@ default-extensions: AllowAmbiguousTypes ApplicativeDo- BangPatterns- BinaryLiterals BlockArguments- ConstraintKinds DataKinds DefaultSignatures DeriveAnyClass- DeriveDataTypeable- DeriveFoldable- DeriveFunctor- DeriveGeneric- DeriveLift- DeriveTraversable DerivingStrategies DerivingVia DisambiguateRecordFields- DoAndIfThenElse DuplicateRecordFields- EmptyCase- EmptyDataDecls- ExistentialQuantification- FlexibleContexts- FlexibleInstances FunctionalDependencies GADTs- GeneralizedNewtypeDeriving- InstanceSigs- KindSignatures LambdaCase LiberalTypeSynonyms- MultiParamTypeClasses MultiWayIf- NamedFieldPuns OverloadedLabels OverloadedLists OverloadedStrings PackageImports PartialTypeSignatures- PatternGuards PatternSynonyms- PolyKinds QuantifiedConstraints QuasiQuotes- RankNTypes RecordWildCards RecursiveDo RoleAnnotations- ScopedTypeVariables- StandaloneDeriving TemplateHaskell- TupleSections- TypeApplications TypeFamilies TypeFamilyDependencies- TypeOperators- TypeSynonymInstances UndecidableInstances UnicodeSyntax ViewPatterns- ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages+ OverloadedRecordDot+ NoFieldSelectors+ ghc-options: -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages build-depends:- base >=4.12 && <5+ base ==4.* , criterion , exon- , incipit-base ==0.5.*+ , incipit-base >=0.4 && <0.6 mixins: base hiding (Prelude) , incipit-base (IncipitBase as Prelude) , incipit-base hiding (IncipitBase)- default-language: Haskell2010+ default-language: GHC2021
lib/Exon.hs view
@@ -52,7 +52,7 @@ ExonUse (..), ) import Exon.Class.ToSegment (ToSegment (..))-import Exon.Combinators (intercalate)+import Exon.Combinators (intercalate, intercalate1, intercalateMay) import Exon.Data.Result (Result (..)) import Exon.Data.Segment (Segment (..)) import Exon.Quote (exon, exonWith, exonws, exun)
lib/Exon/Class/Exon.hs view
@@ -15,9 +15,12 @@ -- -- @since 1.0.0.0 newtype ExonUse a =- ExonUse { exonUse :: a }+ ExonUse a deriving stock (Eq, Show) deriving newtype (IsString)++exonUse :: ExonUse a -> a+exonUse = coerce -- |This class converts a segment into a builder. --
lib/Exon/Combinators.hs view
@@ -1,19 +1,43 @@ -- |Description: Internal module Exon.Combinators where -import Prelude hiding (intercalate)+import qualified Data.List.NonEmpty as NonEmpty+import Prelude hiding (intersperse) --- |Monoidally combine all elements in the list, appending the separator between each pair of elements.+import Exon.Class.Exon (Exon (exonProcess))+import qualified Exon.Data.Segment as Segment++-- | Combine the elements in the list using 'Exon', interspersing the separator between each pair of elements.+intercalate1 ::+ Exon a =>+ a ->+ NonEmpty a ->+ a+intercalate1 sep ta =+ exonProcess (Segment.Expression <$> NonEmpty.intersperse sep ta)++-- | Combine the elements in the list using 'Exon', interspersing the separator between each pair of elements.+--+-- Returns 'Nothing' when the list is empty.+intercalateMay ::+ Exon a =>+ Foldable t =>+ a ->+ t a ->+ Maybe a+intercalateMay sep ta =+ intercalate1 sep <$> nonEmpty (toList ta)++-- | Combine the elements in the list using 'Exon', interspersing the separator between each pair of elements.+--+-- Returns 'mempty' for empty lists; use 'intercalate1' for 'NonEmpty' or 'intercalateMay' to avoid the 'Monoid'+-- requirement. intercalate ::+ Exon a => Monoid a => Foldable t => a -> t a -> a-intercalate sep =- fold . foldl' f Nothing- where- f Nothing a =- Just a- f (Just z) a =- Just (z <> sep <> a)+intercalate sep ta =+ fromMaybe mempty (intercalateMay sep ta)