# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). ## [0.8.1] - 2023-04-05 ### Added - `Weaken` instances for `SizeGreaterThan`, `SizeLessThan`. - `weakenAndLeft`, `weakenAndRight`, `weakenOrLeft`, `weakenOrRight` type inference helper functions. ### Changed - bump `base`: "< 4.18" -> "< 4.19" - bump `mtl`: "< 2.3" -> "< 2.4" - bump `template-haskell`: "< 2.20" -> "< 2.21" ## [0.8] - 2022-10-09 ### Changed - on GHC >=9, make `refineTH` and `refineTH_` work in any monad `(Quote m, MonadFail m)`. - bump `base`: "< 4.17" -> "< 4.18" - bump `template-haskell`: "< 2.19" -> "< 2.20" - bump `aeson`: "< 2.1" -> "< 2.2" ## [0.7] - 2022-07-01 ### Changed - make `Refined` predicate type `p` kind polymorphic (`p :: Type` -> `p :: k`) ## [0.6.3] - 2022-01-14 ### Added - `Hashable` instance for `Refined` - `FromJSONKey` instance for `Refined` - `ToJSONKey` instance for `Refined` - `shrink` for `Refined`'s `Arbitrary` instance. - `refineEither` function ### Changed - improved efficiency of `strengthen` - bump multiple dependency upper bounds ## [0.6.2] - 2021-01-31 ### Changed - `strengthen` no longer returns an `Either`, since the proof that it should always succeed is in its constraints. - correct `success` documentation ## [0.6.1] - 2020-08-02 ### Changed - upper bound on QuickCheck: <2.14 -> <2.15 ## [0.6] - 2020-07-21 ### Changed - `validate` now takes a `Proxy` as its first argument. - All uses of prettyprinter are now just `Text` ### Removed - Refined.These module - Dependency on `prettyprinter` ### Fixed - bug in `sized` internal helper that caused formatting issues in sized predicate errors ## [0.5.1] - 2020-07-14 ### Changed - `refineTH_` is now implemented in terms of `refineTH` - Fix pretty-printing of `RefineException`s during compile-time ## [0.5] - 2020-07-11 ### Added - sized Predicate instances for `Text` - sized Predicate instances for strict and lazy `ByteString` - INLINABLE pragmas on `refine_` `reifyPredicate` - `NFData` instance for `Refined` - RefineSomeException constructor. Enables recovering specific validation exceptions. Thanks to @haroldcarr for adding this. - RefineXorException constructor. - `Empty` and `NotEmpty` predicates. - `NaN` and `Infinite` predicates for floating-point numbers. - @since pragmas to EVERYTHING. ### Changed - lower bound on mtl to 2.2.2 due to use of liftEither. Thanks to @k0ral for reporting this - Generalize sized predicates - Allow newer template-haskell (< 0.16 ==> < 0.17) - Allow newer aeson (< 1.5 ==> < 1.6) Thanks to @locallycompact for this change. ### Removed - `Refined.Internal` module Thanks to @nikita-volkov for pushing me to do this. - Orphan modules Thanks to @symbiont-sam-halliday for pointing out the silliness of these modules. - `RefineT`. It was a needless abstraction that just made the library harder to learn and use, providing little benefit over `Maybe RefineException`. Thanks to @nikita-volkov for helping me see the light. ### Deprecated - Refined.These module in favour of Data.These from these-skinny ## [0.4.4] - 2019-10-18 ### Added - `refine_` - `refineTH_` - test suite: unit tests for compiling. ### Changed - Allow newer `template-haskell` and `QuickCheck`. ## [0.4.2.3] - 2019-09-17 ### Added - `reifyPredicate` ### Fixed - `Arbitrary` instance for `Refined` should now always terminate. Thanks to @symbiont-joseph-kachmar for reporting this. ## [0.4.2.2] - 2019-07-19 ### Added - `exceptRefine`, `strengthen`, and `strengthenM` ## [0.4.2.1] - 2019-05-31 ### Fixed - Documentation fix for `DivisibleBy` ### Changed - Re-export `DivisibleBy`, `Even`, and `Odd` from module `Refined`. - Re-export all constructors from module `Refined`. ## [0.4.2] - 2019-05-30 ### Removed - Re-removed dependency of `these` package. ### Added - `Even`, `Odd`, and `DivisibleBy` predicates. - doctests for all predicates. ### Changed - Make all predicates unary data constructors, instead of nullary, and export those newly added constructors. ## [0.4.1] - 2019-04-15 ### Fixed - Serious regression where `Not p` ~ `p`. Thanks to @k0ral who reported this. ## [0.4] - 2019-03-18 ### Added - 'NegativeFromTo', a Predicate that ensures a numeric value is within a range [a,b], where a < 0 and b >= a. Thanks to github.com/futtetennista for this change. ### Changed - `RefinedNotException` now has a child (it should have had one in v2. This was an oversight.) - `displayRefineException` no longer uses tabs, instead 2 spaces. - make implementation of `displayRefineException` more clear via formatting. ## [0.3.0.0] - 2018-09-26 ### Added - Internal module, and Unsafe modules, making sure to take care w.r.t. the scope of coercions related to the use of the 'Refined' constructor. - 'IdPred' predicate, predicate that never fails. - Generic instances for all predicates. - `reallyUnsafeRefine`, `reallyUnsafeUnderlyingRefined`, `reallyUnsafeAllUnderlyingRefined`, functions that allow one to use 'Coercion's to manually prove things about 'Refined' values. ### Changed - Type role of Refined from 'phantom Representational' to 'nominal nominal'. With the old type role, one can use `coerce` to prove `Q x` given any `P x`. The second parameter should also be nominal because of interactions with something like `GreaterThan` and `Data.Ord.Down`. Thanks to David Feuer for pointing this out. - Change docs to point users to 'Refined.Unsafe' module instead of recommending 'Unsafe.Coerce.unsafeCoerce'. - 'Ascending' and 'Descending' predicates now use 'Foldable' instead of 'IsList'. - Lowered the lower bound on 'exceptions'; it was too strict for the support window. ### Removed - Dependency of the 'these' package. It brings in some very heavy transitive dependencies, even though the datatype in `refined` is used to the most minimal extent. This is a breaking change because this change is exposed to the end user via 'RefineAndException'. It is exported from a module called 'Refined.These'. Users wishing to interact with such exceptions can either just use the datatype constituting a minimal API there, or depend on the 'these' package. ## [0.2.3.0] - 2018-06-01 ### Added - back in the 'Foldable' instance for 'Refined'. It is safe. ## [0.2.2.0] - 2018-05-31 ### Removed - Unsafe typeclass instances that could break the 'Refined' invariant. These should not have been added. ## [0.2.1.0] - 2018-05-31 ### Removed - Unsafe typeclass instances that could break the 'Refined' invariant. These should not have been added. ## [0.2.0.0] - 2018-05-30 ### Changed - Radical rewrite of the library, centred around 'RefineException' and the 'RefineT' monad transformer. 'validate' now has the type signature validate :: (Predicate p x, Monad m) => p -> x -> RefineT m () ### Added - More predicates