Hello again, Sorry, I made a little mistake.
> > a :: Int > > a = let ?foo = 0 in b where > > b :: (?foo :: Int) => Int > > b = let ?foo = 1 in c where > > c = ?foo > The meaning of this code depends on the flag > -f(no)-monomorphism-restriction since with the monomorphism turned on, > `c' gets the monomorphic type `Int', and the `?foo' in the definition > of `c' refers to the implicit parameter of `b', so `a' evaluates to > `0'. On the other hand, without the monomorphism restriction, the type > of `c' becomes `(?foo :: Int) => Int', and it is easy to see that `a' > evaluates to `0'. In this case, `a' of course evaluates to `1'. Thomas _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe