How to use the Data.Map inbuild Monoid

Hello Francesco,
`Map k v` is already an instance of `Monoid` (when `v` is an instance of `Ord`), are you sure you need to write another one?
Thanks for your answer! My "Values" is a Monoid, however it seems that the Graph cannot properly be seen correctly as a Monoid using mconcat does not (properly) work, meaning that <> is not correctly applied to the someMonoidsso instead of type G = Map Text someMonoid mconcat [gs] I have to write: foldr (Map.unionWith (<>)) Map.empty [gs] This passes the tests. Same Problem with g1 <> g2 --(Does not work properly) and Map.unionWith (<>) g1 g2 --(Does work) I have declared someMonoid myself, do I need to declare something special about it? I feel like my G is messing up with <> being about him, or about someMonoid A broken down piece of code is: importData.MapasMap dataSum=SumIntderiving (Eq,Show) instanceSemigroupSumwhere (<>) (Sum a) (Sum b)=Sum(a + b) instanceMonoidSumwhere mempty =Sum0 typeG=Map.MapStringSum And to verify my problem: GHCI > v = Map.singleton "A" (Sum 1) GHCI > u = Map.singleton "A" (Sum 1) GHCI> c= v <> u GHCI> Map.lookup "A" c Just (Sum 1) but I want Just (Sum 2) thanks Leonhard

Hi Leonhard,
the monoidal-containers package should be interesting to you:
http://hackage.haskell.org/package/monoidal-containers
Cheers,
Simon
Am Mo., 18. Nov. 2019 um 23:22 Uhr schrieb Leonhard Applis
Hello Francesco,
`Map k v` is already an instance of `Monoid` (when `v` is an instance of `Ord`), are you sure you need to write another one?
Thanks for your answer! My "Values" is a Monoid, however it seems that the Graph cannot properly be seen correctly as a Monoid
using mconcat does not (properly) work, meaning that <> is not correctly applied to the someMonoids so instead of
type G = Map Text someMonoid mconcat [gs]
I have to write:
foldr (Map.unionWith (<>)) Map.empty [gs]
This passes the tests. Same Problem with g1 <> g2 --(Does not work properly) and Map.unionWith (<>) g1 g2 --(Does work)
I have declared someMonoid myself, do I need to declare something special about it? I feel like my G is messing up with <> being about him, or about someMonoid
A broken down piece of code is:
import Data.Map as Map
data Sum = Sum Int deriving (Eq,Show)
instance Semigroup Sum where (<>) (Sum a) (Sum b)= Sum(a + b) instance Monoid Sum where mempty = Sum 0
type G = Map.Map String Sum
And to verify my problem: GHCI > v = Map.singleton "A" (Sum 1) GHCI > u = Map.singleton "A" (Sum 1) GHCI> c= v <> u GHCI> Map.lookup "A" c Just (Sum 1)
but I want Just (Sum 2)
thanks Leonhard _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (2)
-
Leonhard Applis
-
Simon Jakobi