hedgehog-optics 1.0.0.1 → 1.0.0.2
raw patch · 4 files changed
+77/−84 lines, 4 filesdep ~basedep ~hedgehogdep ~optics-corePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, hedgehog, optics-core
API changes (from Hackage documentation)
Files
- changelog.md +11/−0
- changelog.txt +0/−2
- hedgehog-optics.cabal +9/−13
- src/Hedgehog/Optics.hs +57/−69
+ changelog.md view
@@ -0,0 +1,11 @@+### 1.0.0.2 (2023-01-10)++Support GHC 9.4++### 1.0.0.1 (2022-03-03)++Employ Hedgehog's `annotate` function for better error output++### 1.0.0 (2021-07-09)++Initial release
− changelog.txt
@@ -1,2 +0,0 @@-1.0.0 - Initial release-1.0.0.1 - Employ Hedgehog's 'annotate' function for better error output
hedgehog-optics.cabal view
@@ -1,11 +1,9 @@ cabal-version: 3.0 name: hedgehog-optics-version: 1.0.0.1+version: 1.0.0.2 category: Testing, Optics--synopsis:- Hedgehog properties for optics laws+synopsis: Hedgehog properties for optics laws description: Are your prisms well-formed? Test and be confident.@@ -14,19 +12,17 @@ license: MIT license-file: license.txt -author: Chris Martin+author: Chris Martin maintainer: Chris Martin, Julie Moronuki homepage: https://github.com/typeclasses/hedgehog-optics bug-reports: https://github.com/typeclasses/hedgehog-optics/issues -build-type: Simple--extra-source-files: changelog.txt+extra-source-files: *.md source-repository head- type: git- location: https://github.com/typeclasses/hedgehog-optics+ type: git+ location: https://github.com/typeclasses/hedgehog-optics library default-language: Haskell2010@@ -40,6 +36,6 @@ Hedgehog.Optics build-depends:- base ^>= 4.14 || ^>= 4.15- , hedgehog ^>= 1.0.4- , optics-core ^>= 0.4+ , base ^>= 4.14 || ^>= 4.15 || ^>= 4.16 || ^>= 4.17+ , hedgehog ^>= 1.0.5 || ^>= 1.1 || ^>= 1.2+ , optics-core ^>= 0.4.1
src/Hedgehog/Optics.hs view
@@ -1,7 +1,9 @@ module Hedgehog.Optics- ( wellFormedPrism, wellFormedLens, wellFormedIso- , prismExample- ) where+ (+ wellFormedPrism, wellFormedLens, wellFormedIso,+ prismExample,+ )+ where import Control.Monad (Monad (return)) import Data.Either (Either (Left, Right))@@ -19,133 +21,119 @@ import Optics.Setter (set) import Text.Show (Show) -{- | Checks whether a prism respects the well-formedness-laws given in "Optics.Prism" -}-wellFormedPrism :: Monad m => (Show large, Eq large) =>- (Show small, Eq small) =>+{-| Checks whether a prism respects the well-formedness+ laws given in "Optics.Prism" -}+wellFormedPrism :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) => Gen large -> Gen small- -> Prism' large small {- ^ Prism signifying that the- @small@ type is a subset of the @large@ type -}+ -> Prism' large small -- ^ Prism signifying that the @small@ type+ -- is a subset of the @large@ type -} -> PropertyT m ()-wellFormedPrism genLarge genSmall o =- do+wellFormedPrism genLarge genSmall o = do getSetPrismLaw genLarge o setGetPrismLaw genSmall o -getSetPrismLaw :: Monad m => (Show large, Eq large) =>- (Show small, Eq small) =>+getSetPrismLaw :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) => Gen large -> Prism' large small -> PropertyT m ()-getSetPrismLaw genLarge o =- do+getSetPrismLaw genLarge o = do large <- forAll genLarge case matching o large of- Right small ->- do+ Right small -> do annotate "The get-set law must hold for a Prism" review o small === large Left _ -> return () -setGetPrismLaw :: Monad m => (Show large, Eq large) =>- (Show small, Eq small) =>+setGetPrismLaw :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) => Gen small -> Prism' large small -> PropertyT m ()-setGetPrismLaw genSmall o =- do+setGetPrismLaw genSmall o = do small <- forAll genSmall annotate "The set-get law must hold for a Prism" matching o (review o small) === Right small -{- | Checks whether a lens respects the well-formedness-laws given in "Optics.Lens" -}-wellFormedLens :: Monad m => (Show large, Eq large) =>- (Show small, Eq small) =>+{-| Checks whether a lens respects the well-formedness+ laws given in "Optics.Lens" -}+wellFormedLens :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) => Gen large -> Gen small- -> Lens' large small {- ^ Lens signifying that the @small@- type is a constituent part of the @large@ type -}+ -> Lens' large small -- ^ Lens signifying that the @small@ type is+ -- a constituent part of the @large@ type -> PropertyT m ()-wellFormedLens genLarge genSmall o =- do+wellFormedLens genLarge genSmall o = do getPutLensLaw genLarge genSmall o putGetLensLaw genLarge o putPutLensLaw genLarge genSmall o -getPutLensLaw :: Monad m => (Show large, Eq large) =>- (Show small, Eq small) =>+getPutLensLaw :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) => Gen large -> Gen small -> Lens' large small- -> PropertyT m ()-getPutLensLaw genLarge genSmall o =- do+ -> PropertyT m ()+getPutLensLaw genLarge genSmall o = do large <- forAll genLarge small <- forAll genSmall annotate "The set-get law must hold for a Lens" view o (set o small large) === small -putGetLensLaw :: Monad m => (Show large, Eq large) =>- (Show small, Eq small) =>+putGetLensLaw :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) => Gen large -> Lens' large small -> PropertyT m ()-putGetLensLaw genLarge o =- do+putGetLensLaw genLarge o = do large <- forAll genLarge annotate "The get-set law must hold for a Lens" set o (view o large) large === large -putPutLensLaw :: Monad m => (Show large, Eq large) =>- (Show small, Eq small) =>+putPutLensLaw :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) => Gen large -> Gen small -> Lens' large small- -> PropertyT m ()-putPutLensLaw genLarge genSmall o =- do+ -> PropertyT m ()+putPutLensLaw genLarge genSmall o = do large <- forAll genLarge small1 <- forAll genSmall small2 <- forAll genSmall annotate "The set-set law must hold for a Lens" set o small2 (set o small1 large) === set o small2 large -{- | Checks whether an isomorphism respects the-well-formedness laws given in "Optics.Iso" -}-wellFormedIso :: Monad m => (Show a, Eq a) =>- (Show b, Eq b) =>+{-| Checks whether an isomorphism respects the+ well-formedness laws given in "Optics.Iso" -}+wellFormedIso :: Monad m =>+ (Show a, Eq a) => (Show b, Eq b) => Gen a -> Gen b- -> Iso' a b {- ^ Isomorphism signifying that types- @a@ and @b@ are basically the same thing -}+ -> Iso' a b -- ^ Isomorphism signifying that types+ -- @a@ and @b@ are basically the same thing -> PropertyT m ()-wellFormedIso genA genB o =- do+wellFormedIso genA genB o = do setGetIsoLaw genB o getSetIsoLaw genA o -setGetIsoLaw :: Monad m => (Show a, Eq a) =>- (Show b, Eq b) =>+setGetIsoLaw :: Monad m =>+ (Show a, Eq a) => (Show b, Eq b) => Gen b -> Iso' a b -> PropertyT m ()-setGetIsoLaw genB o =- do+setGetIsoLaw genB o = do b <- forAll genB annotate "The set-get law must hold for an Iso" (view o . review o) b === b -getSetIsoLaw :: Monad m => (Show a, Eq a) =>- (Show b, Eq b) =>+getSetIsoLaw :: Monad m =>+ (Show a, Eq a) => (Show b, Eq b) => Gen a -> Iso' a b -> PropertyT m ()-getSetIsoLaw genA o =- do+getSetIsoLaw genA o = do a <- forAll genA annotate "The get-set law must hold for an Iso" (review o . view o) a === a -{- | Assert that a prism matches for a particular set of values:+{-| Assert that a prism matches for a particular set of values+ A 'review' of the @small@ value should produce the @large@ value, and a 'preview' of the @large@ value should produce the @small@ value. -}-prismExample ::- Monad m =>- (Show large, Eq large) =>- (Show small, Eq small) =>-- Prism' large small {- ^ Prism signifying that the- @small@ type is a subset of the @large@ type -}+prismExample :: Monad m =>+ (Show large, Eq large) => (Show small, Eq small) =>+ Prism' large small -- ^ Prism signifying that the @small@+ -- type is a subset of the @large@ type -> large -> small -> PropertyT m () -prismExample o large small =- do+prismExample o large small = do review o small === large preview o large === Just small