<div class="gmail_quote">On Jan 20, 2008 12:56 AM, Thomas Hartman &lt;<a href="mailto:tphyahoo@gmail.com">tphyahoo@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
The code below compiles as given, however if I uncomment the tSM<br>function I get the overlapping instance error mentioned in the subject<br>line.<br><br>Can someone give me advice on how to do what I want to do?<br><br>
basically I want to add, for example, (USD,1) and (USD,2) and (Euro,3)<br>and get result<br><br>fromList [(USD,3), (Euro,3)]<br><br>the datatypes below are more verbose but the above is the basic idea<br><br>thanks!<br><br>
thomas.<br><br>*****<br><br>module TransactionRows {- ( mkTransactionRows,TransactionRows ) -} where<br>import Data.Monoid<br>import Data.List<br>import qualified Data.Map as M<br><br>data Currency a = Currency a<br> &nbsp;deriving ( Show, Eq, Ord )
<br>data Money c a = Money ( M.Map c a )<br> &nbsp;deriving Show<br>instance (Num a, Ord c)=&gt; Monoid ( Sum (Money c a) ) where<br> &nbsp;mempty = Sum ( Money M.empty )<br> &nbsp;Sum ( Money m1 ) `mappend` Sum ( Money m2 ) = Sum (Money m1
<br>`plusmoney` Money m2)&nbsp;</blockquote><div><br class="webkit-block-placeholder"></div><div>This is the overlap. Data.Monoid already defines an instance for Monoid (Sum a), so it&#39;s going to overlap with your Monoid (Sum (Money c a)).
</div><div><br class="webkit-block-placeholder"></div><div>Unless you&#39;re planning to define more than one Monoid for Money, I suggest skipping Sum entirely.</div></div><br>-- <br>Dave Menendez &lt;<a href="mailto:dave@zednenem.com">
dave@zednenem.com</a>&gt;<br>&lt;<a href="http://www.eyrie.org/~zednenem/">http://www.eyrie.org/~zednenem/</a>&gt;