wild-bind 0.1.1.1 → 0.1.2.0
raw patch · 4 files changed
+27/−10 lines, 4 filesdep +semigroupsdep ~basePVP ok
version bump matches the API change (PVP)
Dependencies added: semigroups
Dependency ranges changed: base
API changes (from Hackage documentation)
+ WildBind.Binding: instance GHC.Classes.Ord i => Data.Semigroup.Semigroup (WildBind.Binding.Binding' bs fs i)
+ WildBind.Seq: instance GHC.Classes.Ord i => Data.Semigroup.Semigroup (WildBind.Seq.SeqBinding fs i)
Files
- ChangeLog.md +6/−0
- src/WildBind/Binding.hs +9/−4
- src/WildBind/Seq.hs +8/−3
- wild-bind.cabal +4/−3
ChangeLog.md view
@@ -1,5 +1,11 @@ # Revision history for wild-bind +## 0.1.2.0 -- 2018-04-10++* Add `Semigroup` instance to `Binding` and `SeqBinding`.+* Confirmed test with `base-4.11`.++ ## 0.1.1.1 -- 2018-03-14 * Confirmed test with `hspec-2.5.0`.
src/WildBind/Binding.hs view
@@ -80,6 +80,7 @@ import Control.Monad.Trans.Writer (Writer, tell, execWriter, mapWriter) import qualified Data.Map as M import Data.Monoid (Monoid(..), Endo(Endo, appEndo))+import Data.Semigroup (Semigroup(..)) import WildBind.Description (ActionDescription) @@ -160,6 +161,13 @@ -- front-end state type, and @i@ is the input type. type Binding s i = Binding' () s i +-- | See "Monoid" instance.+instance Ord i => Semigroup (Binding' bs fs i) where+ abind <> bbind = Binding' $ \bs fs ->+ let amap = mapActResult (<> bbind) $ unBinding' abind bs fs+ bmap = mapActResult (abind <>) $ unBinding' bbind bs fs+ in M.unionWith (\_ b -> b) amap bmap+ -- | 'mempty' returns a 'Binding' where no binding is -- defined. 'mappend' combines two 'Binding's while preserving their -- individual implicit states. The right-hand 'Binding' has precedence@@ -168,10 +176,7 @@ -- the binding from the right-hand one is used. instance Ord i => Monoid (Binding' bs fs i) where mempty = noBinding- mappend abind bbind = Binding' $ \bs fs ->- let amap = mapActResult (`mappend` bbind) $ unBinding' abind bs fs- bmap = mapActResult (abind `mappend`) $ unBinding' bbind bs fs- in M.unionWith (\_ b -> b) amap bmap+ mappend = (<>) -- | A 'Binding'' with no bindings. It's the same as 'mempty', except -- 'noBinding' requires no context.
src/WildBind/Seq.hs view
@@ -27,7 +27,8 @@ import Control.Monad.Trans.State (State) import qualified Control.Monad.Trans.State as State-import Data.Monoid (Monoid(..), (<>), mconcat)+import Data.Monoid (Monoid(..), mconcat)+import Data.Semigroup (Semigroup(..)) import WildBind.Binding ( Binding, Binding', binds', whenBack, on, as, run, extend,@@ -39,10 +40,14 @@ newtype SeqBinding fs i = SeqBinding ([i] -> Binding' [i] fs i) -- | Follows the same rule as 'Binding'.+instance Ord i => Semigroup (SeqBinding fs i) where+ (SeqBinding a) <> (SeqBinding b) =+ SeqBinding $ \ps -> mappend (a ps) (b ps)++-- | Follows the same rule as 'Binding'. instance Ord i => Monoid (SeqBinding fs i) where mempty = SeqBinding $ const mempty- mappend (SeqBinding a) (SeqBinding b) =- SeqBinding $ \ps -> mappend (a ps) (b ps)+ mappend = (<>) -- | Prepend prefix keys to the 'SeqBinding'. --
wild-bind.cabal view
@@ -1,5 +1,5 @@ name: wild-bind-version: 0.1.1.1+version: 0.1.2.0 author: Toshio Ito <debug.ito@gmail.com> maintainer: Toshio Ito <debug.ito@gmail.com> license: BSD3@@ -26,10 +26,11 @@ WildBind.Input.NumPad, WildBind.Seq -- other-modules: - build-depends: base >=4.6 && <5.0,+ build-depends: base >=4.6 && <4.12, text >=1.2.0 && <1.3, containers >=0.5.0 && <0.6,- transformers >=0.3.0 && <0.6+ transformers >=0.3.0 && <0.6,+ semigroups >=0.16.2.2 && <0.19 -- executable wild-bind -- default-language: Haskell2010