[Haskell-beginners] duplicate monoids...

Joel Williamson joel.s.williamson at gmail.com
Tue Oct 20 21:40:21 UTC 2015


A type can only have a single instance of a given class. Imagine if this
weren't true. The compiler would have to guess which of the instances you
meant to use. The solution is to use newtype. That will introduce a
different type, allowing separate instances, but is optimised out so it
carries no runtime cost.

On Tue, 20 Oct 2015, 17:24 Mike Houghton <mike_k_houghton at yahoo.co.uk>
wrote:

> Hi,
>
> I’m looking at a blog post on Monoids and finger trees at
> http://apfelmus.nfshost.com/articles/monoid-fingertree.html
> and would appreciate  a bit of advice
>
> I have
>
> type Size = Int
> type Priority = Int
>
> instance Monoid Size where
>     mempty  = 0
>     mappend = (+)
>
> instance Monoid Priority where
>     mempty  = maxBound
>     mappend = min
>
>
> and I get compiler error
>
>   Duplicate instance declarations:
>       instance Monoid Size
>         -- Defined at /Users/mike/haskell/FingerTrees/Ftree.hs:60:10
>       instance Monoid Priority
>         -- Defined at /Users/mike/haskell/FingerTrees/Ftree.hs:64:10
>
> Which I can sort  of understand as Size and Priority are both Int but on
> the other hand, internally, the monoids  are different.
>
> Is this genuinely incorrect code or is there a language extension to get
> around this?
>
> Thanks
>
> Mike
>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151020/b491799e/attachment.html>


More information about the Beginners mailing list