[Haskell-cafe] Inferred type not most general?

Greg Buchholz haskell at sleepingsquirrel.org
Fri Jun 9 22:57:19 EDT 2006

    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)


Greg Buchholz

More information about the Haskell-Cafe mailing list