Re: [Haskell-cafe] Confused by SYB example with zipping

2009-02-16 Thread José Pedro Magalhães
Hello Henry,

Changes to GHC regarding the treatment of higher-rank types required a few
changes to that test too. You have to eta-expand the application of mkTT and
give it a type signature. Therefore, main becomes

print $ gzip (\x y -> mkTT maxS x y) genCom1 genCom2
>

and you have to add the type signature

mkTT :: (Typeable a, Typeable b, Typeable c) => (a -> a -> a) -> b -> c ->
> Maybe c .
>

Then this example should work.

As to why exactly these changes are necessary, you might want to check the
GHC manual section on arbitrary-rank polymorphism (
http://haskell.org/ghc/docs/latest/html/users_guide/other-type-extensions.html#universal-quantification
).


Cheers,
Pedro

On Sat, Feb 14, 2009 at 21:55, Henry Laxen wrote:

> Dear Group,
>
> When trying to run the example at:
> http://www.cs.vu.nl/boilerplate/testsuite/gzip/Main.hs
> ghc 6.10.1 says
>
>A pattern type signature cannot bind scoped type variables `a'
>  unless the pattern has a rigid type context
>In the pattern: f :: a -> a -> a
>In the definition of `mkTT':
>mkTT (f :: a -> a -> a) x y
>   = case (cast x, cast y) of {
>   (Just (x' :: a), Just (y' :: a)) -> cast (f x' y')
>   _ -> Nothing }
>In the definition of `main':
>main = print $ gzip (mkTT maxS) genCom1 genCom2
> where
> genCom1 = everywhere (mkT (double "Joost")) genCom
> genCom2 = everywhere (mkT (double "Marlow")) genCom
> double x (E (p@(P y _)) (S s)) | x == y = E p (S (2 * s))
> double _ e = e
> maxS (S x) (S y) = S (max x y)
> 
> Failed, modules loaded: CompanyDatatypes.
>
> -
> I must admit I don't really know what to make of this.  Any insights would
> be appreciated.
> Thanks.
> Henry Laxen
>
> ___
> 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


[Haskell-cafe] Confused by SYB example with zipping

2009-02-14 Thread Henry Laxen
Dear Group,

When trying to run the example at:
http://www.cs.vu.nl/boilerplate/testsuite/gzip/Main.hs
ghc 6.10.1 says

A pattern type signature cannot bind scoped type variables `a'
  unless the pattern has a rigid type context
In the pattern: f :: a -> a -> a
In the definition of `mkTT':
mkTT (f :: a -> a -> a) x y
   = case (cast x, cast y) of {
   (Just (x' :: a), Just (y' :: a)) -> cast (f x' y')
   _ -> Nothing }
In the definition of `main':
main = print $ gzip (mkTT maxS) genCom1 genCom2
 where
 genCom1 = everywhere (mkT (double "Joost")) genCom
 genCom2 = everywhere (mkT (double "Marlow")) genCom
 double x (E (p@(P y _)) (S s)) | x == y = E p (S (2 * s))
 double _ e = e
 maxS (S x) (S y) = S (max x y)
 
Failed, modules loaded: CompanyDatatypes.

-
I must admit I don't really know what to make of this.  Any insights would
be appreciated.
Thanks.
Henry Laxen

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