[Haskell-cafe] Deconstruction

Miguel Mitrofanov miguelimo38 at yandex.ru
Sat Dec 26 12:09:50 EST 2009


Your code is equivalent to this:

adjustToBox (ObjectWrapper object) box = adjustToBox object box

but what you've probably intended to write was

adjustToBox (ObjectWrapper object) box = ObjectWrapper (adjustToBox  
object box)

It has nothing to do with existentials - it's a simple type mismatch.

On 26 Dec 2009, at 19:53, haskell at kudling.de wrote:

> Hi all,
>
> thanks for the insight.
>
> > But you can deconstruct the enclosed value temporarily:
> >
> > getSomething :: Bar -> Double
> > getSomething b =
> >      case b of
> >          Bar a -> doSomething a
>
> Somehow i fail to apply this.
>
> If you look at
> http://chlor.svn.sourceforge.net/viewvc/chlor/trunk/haskell/Chlor/Object.hs?revision=603&view=markup
>
> in line 26 i used this for function "adjustToBox", but i still get:
>
> Chlor/Object.hs:33:36:
>     Couldn't match expected type `ObjectWrapper'
>            against inferred type `a'
>       `a' is a rigid type variable bound by
>           the constructor `ObjectWrapper' at Chlor/Object.hs:33:12
>     In the expression: adjustToBox object
>     In a case alternative: ObjectWrapper object -> adjustToBox object
>     In the expression:
>         case wrapper of { ObjectWrapper object -> adjustToBox object }
>
> :(
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list