composite-lens-extra 0.0.1.0 → 0.1.0.0
raw patch · 3 files changed
+22/−67 lines, 3 filesdep ~composite-basedep ~lensdep ~vinylPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: composite-base, lens, vinyl
API changes (from Hackage documentation)
- Composite.Lens.Extra: infixr 5 :!:
- Composite.Lens.Extra: pattern (:!:) :: forall s f rs a. Contravariant f => () => f a -> Rec f rs -> Rec f ((s :-> a) : rs)
- Composite.Lens.Extra: rlens'' :: (Contravariant f, Functor g, RElem (s :-> a) rs) => proxy (s :-> a) -> (f a -> g (f a)) -> Rec f rs -> g (Rec f rs)
Files
- ChangeLog.md +4/−0
- composite-lens-extra.cabal +6/−6
- src/Composite/Lens/Extra.hs +12/−61
ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for composite-lens-extra +## v0.1.0.0++* Remove `(:!:)` and `rlens'` which are now in composite-base.+ ## v0.0.1.0 * Add `(:!:)` pattern for contravariant base functors.
composite-lens-extra.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.4.+-- This file has been generated from package.yaml by hpack version 0.34.7. -- -- see: https://github.com/sol/hpack name: composite-lens-extra-version: 0.0.1.0+version: 0.1.0.0 synopsis: Extra lens functions for composite. description: Extra lens functions for composite. category: Composite, Data, Lens@@ -30,10 +30,10 @@ Paths_composite_lens_extra hs-source-dirs: src- ghc-options: -Weverything -Wno-all-missed-specialisations -Wno-missing-import-lists -Wno-implicit-prelude -Wno-monomorphism-restriction -Wno-missing-local-signatures -Wno-missing-safe-haskell-mode -Wno-prepositive-qualified-module -Wno-safe -Wno-unsafe+ ghc-options: -Weverything -Wno-all-missed-specialisations -Wno-implicit-prelude -Wno-monomorphism-restriction -Wno-missing-local-signatures -Wno-missing-safe-haskell-mode -Wno-prepositive-qualified-module -Wno-safe -Wno-unsafe build-depends: base >=4.7 && <5- , composite-base >=0.7.0.0 && <0.8- , lens >=4.0 && <5.1- , vinyl >=0.13.0 && <0.14+ , composite-base >=0.7.0.0 && <0.9+ , lens >=4.0 && <5.3+ , vinyl >=0.13.0 && <0.15 default-language: Haskell2010
src/Composite/Lens/Extra.hs view
@@ -1,74 +1,25 @@ {-# LANGUAGE AllowAmbiguousTypes #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE ViewPatterns #-} module Composite.Lens.Extra- ( pattern (:!:),- rlens'',+ ( rlensS, rlensS', rlensS'', ) where -import Composite.Record-import qualified Control.Lens as L-import Data.Functor.Contravariant-import qualified Data.Vinyl as Vinyl-import Data.Vinyl.TypeLevel---- | Bidirectional pattern matching the first field of a record using ':->' values and any contavariant functor.------ This pattern is bidirectional meaning you can use it either as a pattern or a constructor, e.g.------ @--- let rec = Predicate even :!: Predicate (even . length) :!: RNil--- Predicate foo :!: Predicate bar :!: RNil = rec--- @------ @since 0.0.1.0-pattern (:!:) :: forall s f rs a. Contravariant f => () => f a -> Rec f rs -> Rec f (s :-> a ': rs)-pattern (:!:) fa rs <-- (contramap Val -> fa) :& rs- where- (:!:) fa rs = contramap getVal fa :& rs--infixr 5 :!:---- | Lens to a particular field of a record using a contravariant functor.------ For example, given:------ @--- type FFoo = "foo" :-> Int--- type FBar = "bar" :-> String--- fBar_ :: Proxy FBar--- fBar_ = Proxy------ rec :: 'Rec' 'Predicate' '[FFoo, FBar]--- rec = Predicate even :!: Predicate (even . length) :!: Nil--- @------ Then:------ @--- view (rlens'' fBar_) rec == Predicate even--- set (rlens'' fBar_) Predicate (odd . length) rec == Predicate even :!: Predicate (odd . length) :!: Nil--- over (rlens'' fBar_) (contramap show) rec == Predicate even :!: Predicate (odd . length . show) :!: Nil--- @------ @since 0.0.1.0-rlens'' :: (Contravariant f, Functor g, RElem (s :-> a) rs) => proxy (s :-> a) -> (f a -> g (f a)) -> Rec f rs -> g (Rec f rs)-rlens'' proxy f =- Vinyl.rlens $ \(contramap (reifyVal proxy . Val) -> fa) ->- contramap getVal <$> f fa-{-# INLINE rlens'' #-}+import Composite.Record (Rec, Record, getVal, (:->) (Val))+import qualified Control.Lens as L+import Data.Functor.Contravariant (Contravariant (contramap))+import qualified Data.Vinyl as Vinyl+import Data.Vinyl.TypeLevel (RIndex) -- | Type changing lens over a `Record` field. --