
On Wednesday 19 January 2005 21:20, Jorge Adriano Aires wrote:
Perhaps one could have top-level implicit parameters (or top-level contexts in general):
module (?myvar :: IORef Int) => Random where
I suggested something very similar to this some months ago, syntax and all. Nice to see I'm not the only one thinking along this lines.
Please note that implicit parameters -- at least as currently implemented in GHC -- have a number of severe problems. A good summary was given by Ben Rudiak-Gould in http://www.mail-archive.com/haskell%40haskell.org/msg15595.html (although in a different context):
[...] In a program with implicit parameters:
* Beta conversion no longer preserves semantics.
* The monomorphism restriction is no longer a restriction: it sometimes silently changes the meaning of a program.
* Adding type signatures for documentation is no longer safe, since they may silently change the behavior of the program.
* It's not even safe in general to add a signature giving the same type that the compiler would infer anyway: there are (common) cases in which this too changes the program's meaning. I ran into this quite by accident the first time I tried to use implicit parameters, and it was enough to scare me away from ever trusting them again.
Ben