
In the case of Dual [1] `mappend` Dual [2] there's no need to do any unwrapping. There is if you say: l :: [Int] l = Dual [1] `mappend` Dual [2] The way I think this could work is that when the type checker detects a type error, it will first try to resolve it by newtype unwrapping (or wrapping even). Sjoerd On Dec 3, 2009, at 11:47 AM, Holger Siegel wrote:
Am Donnerstag, den 03.12.2009, 01:40 +0100 schrieb Sjoerd Visscher:
The idea is that there's just enough unwrapping such that you don't need to use getDual and appEndo.
Yes, but what does
Dual [1] `mappend Dual [2]
mean then? Should it use the Monoid instance of Dual and return
Dual [2, 1]
? Should it unwrap the lists beforehand and re-wrap them afterwards and return
Dual [1, 2]
? Should it unwrap the resulting list afterwards and return [1, 2] or even [2,1] ?
That's not obvious to me.
On Dec 3, 2009, at 1:25 AM, Holger Siegel wrote:
Am Donnerstag, den 03.12.2009, 01:16 +0100 schrieb Martijn van Steenbergen:
So here's a totally wild idea Sjoerd and I came up with.
What if newtypes were unwrapped implicitly?
What advantages and disadvantages would it have? In what cases would this lead to ambiguous code?
1) instance Monoid a => Monoid (Dual a)
2) instance Monoid (Endo a) instance Monoid b => Monoid (a -> b)
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Sjoerd Visscher sjoerd@w3future.com
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Sjoerd Visscher sjoerd@w3future.com