On Fri, Feb 03, 2017 at 09:47:04PM +0000, mike h wrote:

> I have

>

> ----------

> import qualified Data.Map as M

>

> type Link a = (a, Int)

> data MChain a = Map a [Link a] deriving (Show)

>

> -------------------

>

> and want to make a Monoid of MChain. So I have

>

> -------------------

> instance Monoid (MChain a) where

> mempty = M.empty

> mappend = undefined

> -------------------

>

> this won’t compile and I need M.empty to be Map a [Link a]

Hello Mike, I think the error lies in the confusion between

`type` and `data` declaration.

type Something = Int

but

data Something = SomeConstructor Int

So I bet you wanted to write

data MChain a = MChain (M.Map a [Link a]) deriving (Show)

`M.empty` returns a Map.

λ> :t M.empty

M.empty :: M.Map k aj

Hence this will work:

instance Monoid (MChain a) where

mempty = MChain M.empty

mappend = undefined

Does this help?

_______________________________________________

Beginners mailing list

[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners