But in fact it seems to me that the type variable "a" not only can, but must unify with "b->c".

Is there any use of fix for which this is not true? If this is true, is the type "a" instead of "b->c" because it is not possible in general for the type checker to verify this fact, making it some kind of underivable true statement?

If it is not true, I would dearly love to see a use of fix with a type for which functional application is not defined.

For me, it is this aspect (the type of fix) that has made it so much harder to understand fix than it should have been.

Dan

Pete Kazmier wrote:
"Matthew Brecknell" <[EMAIL PROTECTED]> writes:

As others have pointed out, fix is polymorphic, so "a" can stand for any
type, including "(b -> c)". Removing redundant parentheses, this means
fix can directly specialise to:

fix :: ((b -> c) -> b -> c) -> b -> c

I understand now.  I think part of my problem was that I was trying to
grasp one too many new things all at once.  This makes perfect sense.

Thanks,
Pete

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

Reply via email to