total-map 0.0.2 → 0.0.3
raw patch · 2 files changed
+23/−3 lines, 2 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Data.TotalMap: instance (Ord k, Monoid v) => Monoid (TMap k v)
Files
- src/Data/TotalMap.hs +21/−2
- total-map.cabal +2/−1
src/Data/TotalMap.hs view
@@ -16,15 +16,16 @@ module Data.TotalMap (TMap,(!),tabulate,trim) where import Data.Monoid (Monoid(..))-import Control.Applicative (Applicative(..),(<$>))+import Control.Applicative (Applicative(..),liftA2,(<$>)) import Data.Maybe (fromMaybe) import Data.Map (Map) import qualified Data.Map as M- import Data.Set (Set) import qualified Data.Set as S +-- import Control.Comonad -- TODO+ -- | Total map data TMap k v = TMap v (Map k v) deriving Functor @@ -50,6 +51,17 @@ tabulate' = (fmap.fmap.fmap) trim tabulate -} +{--------------------------------------------------------------------+ Instances+--------------------------------------------------------------------}++-- These instances follow the principle that semantic functions (here (!))+-- must be type class morphism (TCM) for all inhabited type classes.++instance (Ord k, Monoid v) => Monoid (TMap k v) where+ mempty = pure mempty+ mappend = liftA2 mappend+ instance Ord k => Applicative (TMap k) where pure v = TMap v mempty fs@(TMap df mf) <*> xs@(TMap dx mx) = @@ -100,6 +112,13 @@ spec: -}++{--------------------------------------------------------------------+ Comonad+--------------------------------------------------------------------}++-- TODO: Based on the function-of-monoid comonad.+-- TODO: Also a version with a pointer. {-------------------------------------------------------------------- Misc
total-map.cabal view
@@ -1,5 +1,5 @@ Name: total-map-Version: 0.0.2+Version: 0.0.3 Cabal-Version: >= 1.6 Synopsis: Finitely represented /total/ maps Category: @@ -22,5 +22,6 @@ hs-Source-Dirs: src Extensions: Build-Depends: base<5, containers+ -- , comonad Exposed-Modules: Data.TotalMap