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 +4/−0
- monoid-extras.cabal +4/−3
- src/Data/Monoid/Recommend.hs +49/−0
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