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
>>> [email protected]
>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>> 
>> --
>> Sjoerd Visscher
>> [email protected]
>> 
>> 
>> 
> 
> _______________________________________________
> Haskell-Cafe mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe

--
Sjoerd Visscher
[email protected]



_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to