packages feed

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 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