When using implicit parameters I have noticed (at least for me) a rather puzzling behaviour with GHC and Hugs. Given the declarations data Env = Env {numlines :: Int, numcols :: Int} initEnv = Env {numlines = 0, numcols = 1} withEnv :: ((?env :: Env) => IO a) -> IO a withEnv io = let ?env = initEnv in io I can write code like: main = withEnv (do let lines = numlines ?env putStrLn ("Initial number of lines is " ++ (show lines))) which works as expected, but the version below main = withEnv $ do let lines = numlines ?env putStrLn ("Initial number of lines is " ++ (show lines)) is not accepted by either GHC or Hugs! Is this a bug or have stumbled into a context where it actually matters if you use '$' or explicit grouping with parentheses? Per Larsson