<div>Hi, <br></div><div><br></div><div>I currently have a newtype definition of a typed Data.Map. <br></div><div><br></div><div>newtype G = G Data.Map String Values <br></div><div><br></div><div>I have done this because for my specific use-case, I can define G as a monoid and get some nice benefits. <br></div><div><br></div><div>However, I find myself often just re-declaring functions of Data.Map and wrap/unwrap them in my Constructor G, such as <br></div><div><br></div><div>singleton :: String -> Value -> G<br></div><div>singleton s v = G $ (Data.Map.singleton s v) <br></div><div><br></div><div>I think I do not need to limit the scope of G's functionality, I basically want everything from Data.Map + Bonus , like my Monoid. <br></div><div>Also I want G to be a specific Data.Map, there is never any other case where it's not a Map String Values. <br></div><div><br></div><div>However, if I have <br></div><div><br></div><div>type G2 = Data.Map String Values <br></div><div><br></div><div>I cannot instance Monoid. <br></div><div><br></div><div>So, I am very sure that I'm not the first person ever doing this. Is there a language extension providing what I want? Or is what i want "bad"? <br></div><div>Am I just missing a higher-order base function which does what I want?<br></div><div><br></div><div>best regards & thanks<br></div><div>Leonhard</div><div class="protonmail_signature_block protonmail_signature_block-empty"><div class="protonmail_signature_block-user protonmail_signature_block-empty"><br></div><div class="protonmail_signature_block-proton protonmail_signature_block-empty"><br></div></div><div><br></div>