allow implicit parameter bindings in patterns
It could work like such:
main = do ?conts <- getContents fun fun :: (?conts :: String) -> IO () fun = ...
becoming something like
main = do conts <- getContents let ?conts = conts fun
Of course there are still questions regarding interactions with pattern guards and view patterns (whether those variables should be in scope for other guards, or for view patterns that follow).
This interaction with view patterns (and pattern guards), should likely elicit a warning:
let ?x = 1 in let f ?x ((?x +) -> y) = y in f 0 0
As it might be expected that this expression should be 1, while I think it should evaluate to 0.
This probably would lead to more syntax stealing, but it seems unlikely that there would be code that enables -XImplicitParams that does stuff like:
x ?y = ...
Expecting to define the function `?', rather than binding the implicit parameter ?y.