packages feed

monoid-extras 0.2.1.0 → 0.2.2.0

raw patch · 3 files changed

+57/−3 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.Monoid.Recommend: Commit :: a -> Recommend a
+ Data.Monoid.Recommend: Recommend :: a -> Recommend a
+ Data.Monoid.Recommend: data Recommend a
+ Data.Monoid.Recommend: getRecommend :: Recommend a -> a
+ Data.Monoid.Recommend: instance (Semigroup a, Monoid a) => Monoid (Recommend a)
+ Data.Monoid.Recommend: instance Semigroup a => Semigroup (Recommend a)

Files

CHANGES view
@@ -1,3 +1,7 @@+* 0.2.2.0: 10 December 2012++  - Add new module Data.Monoid.Recommend+ * 0.2.1.0: 28 September 2012    - Add new module Data.Monoid.Cut
monoid-extras.cabal view
@@ -1,9 +1,9 @@ name:                monoid-extras-version:             0.2.1.0+version:             0.2.2.0 synopsis:            Various extra monoid-related definitions and utilities description:         Various extra monoid-related definitions and utilities,-                     such as monoid actions, monoid coproducts, "deletable"-                     monoids, "split" monoids, and "cut" monoids.+                     such as monoid actions, monoid coproducts, \"deletable\"+                     monoids, \"split\" monoids, and \"cut\" monoids. license:             BSD3 license-file:        LICENSE extra-source-files:  CHANGES@@ -26,6 +26,7 @@                      Data.Monoid.Deletable,                      Data.Monoid.MList,                      Data.Monoid.PosInf,+                     Data.Monoid.Recommend,                      Data.Monoid.Split,                      Data.Monoid.WithSemigroup 
+ src/Data/Monoid/Recommend.hs view
@@ -0,0 +1,49 @@++-----------------------------------------------------------------------------+-- |+-- Module      :  Data.Monoid.Recommend+-- Copyright   :  (c) 2012 diagrams-core team (see LICENSE)+-- License     :  BSD-style (see LICENSE)+-- Maintainer  :  diagrams-discuss@googlegroups.com+--+-- A type for representing values with an additional bit saying+-- whether the value is \"just a recommendation\" (to be used only if+-- nothing better comes along) or a \"committment\" (to certainly be+-- used, overriding merely recommended values), along with+-- corresponding @Semigroup@ and @Monoid@ instances.+--+-----------------------------------------------------------------------------++module Data.Monoid.Recommend+       ( Recommend(..), getRecommend+       ) where++import Data.Semigroup++-- | A value of type @Recommend a@ consists of a value of type @a@+--   wrapped up in one of two constructors.  The @Recommend@+--   constructor indicates a \"non-committal recommendation\"---that+--   is, the given value should be used if no other/better values are+--   available.  The @Commit@ constructor indicates a+--   \"commitment\"---a value which should definitely be used,+--   overriding any @Recommend@ed values.+data Recommend a = Recommend a+                 | Commit a++-- | Extract the value of type @a@ wrapped in @Recommend a@.+getRecommend :: Recommend a -> a+getRecommend (Recommend a) = a+getRecommend (Commit a)    = a++-- | 'Commit' overrides 'Recommend'. Two values wrapped in the same+--   constructor (both 'Recommend' or both 'Commit') are combined+--   according to the underlying @Semigroup@ instance.+instance Semigroup a => Semigroup (Recommend a) where+  Recommend a <> Recommend b = Recommend (a <> b)+  Recommend _ <> Commit b    = Commit b+  Commit a    <> Recommend _ = Commit a+  Commit a    <> Commit b    = Commit (a <> b)++instance (Semigroup a, Monoid a) => Monoid (Recommend a) where+  mappend = (<>)+  mempty  = Recommend mempty