proto-lens-combinators 0.1.0.12 → 0.4
raw patch · 4 files changed
+24/−22 lines, 4 filesdep +proto-lens-runtimedep −data-default-classdep −proto-lens-protocdep ~basedep ~proto-lensPVP ok
version bump matches the API change (PVP)
Dependencies added: proto-lens-runtime
Dependencies removed: data-default-class, proto-lens-protoc
Dependency ranges changed: base, proto-lens
API changes (from Hackage documentation)
- Data.ProtoLens.Combinators: make :: Default def => State def a -> def
+ Data.ProtoLens.Combinators: make :: Message msg => State msg a -> msg
Files
- Changelog.md +4/−1
- proto-lens-combinators.cabal +7/−8
- src/Data/ProtoLens/Combinators.hs +3/−3
- tests/combinators_test.hs +10/−10
Changelog.md view
@@ -1,7 +1,10 @@ # Changelog for `proto-lens-combinators` +## v0.4.0.0+- Update to (and require) `proto-lens-0.4.*`.+ ## v0.1.0.12-- Add support for ghc-8.6.+- Switch to `proto-lens-{setup/runtime}` v0.4. ## v0.1.0.11 - Bump the lower bound on `base` to indicate we require `ghc>=8.0`.
proto-lens-combinators.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 7a0758df4f3edec44050b361e5e9a8dad6b8c81b46fb199d71c85c2cb52b43b4+-- hash: 6dee157d60bdded5f5b245b2c18c7f4cff2e4fb8a8deec8b89aa190d71b8d60c name: proto-lens-combinators-version: 0.1.0.12+version: 0.4 synopsis: Utilities functions to proto-lens. description: Useful things for working with protos. category: Data@@ -30,8 +30,8 @@ custom-setup setup-depends: Cabal- , base >=4.9 && <4.13- , proto-lens-protoc ==0.3.*+ , base >=4.9 && <4.12+ , proto-lens-setup ==0.4.* library exposed-modules:@@ -41,10 +41,9 @@ hs-source-dirs: src build-depends:- base >=4.9 && <4.13- , data-default-class >=0.0 && <0.2+ base >=4.9 && <4.12 , lens-family ==1.2.*- , proto-lens-protoc ==0.3.*+ , proto-lens ==0.4.* , transformers >=0.4 && <0.6 default-language: Haskell2010 @@ -62,7 +61,7 @@ , lens-family-core , proto-lens , proto-lens-combinators- , proto-lens-protoc+ , proto-lens-runtime ==0.4.* , test-framework , test-framework-hunit default-language: Haskell2010
src/Data/ProtoLens/Combinators.hs view
@@ -16,7 +16,7 @@ ) where import Control.Monad.Trans.State (State, execState)-import Data.Default.Class (Default(def))+import Data.ProtoLens (Message(..)) import Data.Maybe (isJust) import Lens.Family2 (LensLike, Phantom, Setter, to, (.~)) @@ -33,8 +33,8 @@ -- | Creates a 'Default' and then applies the provided `State` to it. This is -- convenient for creating complicated structures.-make :: Default def => State def a -> def-make = modifyInState def+make :: Message msg => State msg a -> msg+make = modifyInState defMessage -- | Allows one to modify a value in the 'State' monad. Note that this is -- just for syntactic convenience with @do@ blocks, e.g.
tests/combinators_test.hs view
@@ -7,7 +7,7 @@ {-# LANGUAGE OverloadedStrings #-} module Main where -import Data.ProtoLens (def)+import Data.ProtoLens (defMessage) import Data.ProtoLens.Combinators import Lens.Family ((^.), (.~), (&)) import Lens.Family.State ((.=), (<~), use, zoom)@@ -19,7 +19,7 @@ main :: IO () main = defaultMain $ hUnitTestToTests $ "" ~:- [ let proto = def & quux .~ 1 & foo .~ def :: Foo+ [ let proto = defMessage & quux .~ 1 & foo .~ defMessage :: Foo in "has" ~: [ "True" ~: proto ^. has maybe'quux ~?= True , "False" ~: proto ^. has maybe'bar ~?= False@@ -28,13 +28,13 @@ , "False" ~: proto ^. has (foo . maybe'buzz) ~?= False ] ]- , let proto = def & quux .~ 2 & foo . fizz .~ 3 :: Foo+ , let proto = defMessage & quux .~ 2 & foo . fizz .~ 3 :: Foo in "clear" ~: [ "no-op" ~: clear maybe'bar proto ~?= proto- , "scalar" ~: clear maybe'quux proto ~?= (def & foo . fizz .~ 3)- , "group" ~: clear maybe'foo proto ~?= (def & quux .~ 2)+ , "scalar" ~: clear maybe'quux proto ~?= (defMessage & foo . fizz .~ 3)+ , "group" ~: clear maybe'foo proto ~?= (defMessage & quux .~ 2) , "nested" ~: clear (foo . maybe'fizz) proto ~?=- (def & quux .~ 2 & foo .~ def)+ (defMessage & quux .~ 2 & foo .~ defMessage) ] , let actual :: Foo actual = make $ do@@ -44,13 +44,13 @@ fizz .= 5 buzz .= "B" zoom baz $ return ()- expected = def & quux .~ 4 & foo . buzz .~ "A" &- bar .~ (def & fizz .~ 5 & buzz .~ "B") & baz .~ def+ expected = defMessage & quux .~ 4 & foo . buzz .~ "A" &+ bar .~ (defMessage & fizz .~ 5 & buzz .~ "B") & baz .~ defMessage in "make" ~: actual ~?= expected- , let original = def & quux .~ 6 & baz . fizz .~ 7 :: Foo+ , let original = defMessage & quux .~ 6 & baz . fizz .~ 7 :: Foo actual = modifyInState original $ do bar . fizz <~ use quux quux .= 8- expected = def & quux .~ 8 & bar . fizz .~ 6 & baz . fizz .~ 7+ expected = defMessage & quux .~ 8 & bar . fizz .~ 6 & baz . fizz .~ 7 in "modifyInState" ~: actual ~?= expected ]