On 24 May 2009, at 01:19, Max Cantor wrote:

Going through the instances for HTypeable (http://www.haskell.org/HaXml/HaXml/src/Text/XML/HaXml/TypeMapping.html#toHType ) I saw the following instance for Either a b.

My question is, why doesn't the pattern match in the where clause always fail? If (Left x) = m does not fail, doesn't that imply that m is a Left x and therefore the (Right y) = m should fail?

It does; at least one of x and y is (_|_). However, toHType function doesn't really need it's argument; all that is needed is the type of an argument. Therefore, toHType is quite happy to receive (_|_) as an argument - so, hx and hy are well-defined.



thanks, max



instance (HTypeable a, HTypeable b) => HTypeable (Either a b) where
 toHType m      = Defined "Either" [hx, hy]
                      [ Constr "Left" [hx] [hx] {-Nothing-}
                      , Constr "Right" [hy] [hy] {-Nothing-}]
                where (Left x)  = m
                      (Right y) = m
                      hx = toHType x
                      hy = toHType y


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to