Re: [Haskell-cafe] Inferred type not most general?

2006-06-10 Thread Malcolm Wallace
Greg Buchholz <[EMAIL PROTECTED]> writes:

> tmap :: (b -> a, b -> a) -> Twist b b -> Twist a a 
> 
> ...I'm wondering why they couldn't infer the more general...
> 
> tmap :: (a -> b, c -> d) -> Twist a c -> Twist b d

Because the latter type involves polymorphic recursion.  Standard H-M
cannot infer a poly recursive type, but Haskell is willing to check it
if you give it a signature.

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


[Haskell-cafe] Inferred type not most general?

2006-06-09 Thread Greg Buchholz

I'm curious about a type inference oddity.  In the code below, if I
leave off the type signature for tmap, both GHC and Hugs infer that tmap
has type...

tmap :: (b -> a, b -> a) -> Twist b b -> Twist a a 

...I'm wondering why they couldn't infer the more general...

tmap :: (a -> b, c -> d) -> Twist a c -> Twist b d

>data Twist a b = Nil | Cons a (Twist b a) deriving Show
>
>x = (Cons "foo" (Cons 1 (Cons "bar" (Cons 2 Nil
>
>tmap :: (a->b,c->d) -> Twist a c -> Twist b d
>tmap _ Nil = Nil
>tmap (f,g) (Cons x rest) = Cons (f x) (tmap (g,f) rest)

Thanks,

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