i don't think this is a bug, and this is a situation where it matters
if you use ($) or parens. the same probelm occurs when you work
with polymorohism, rank-2 and above, e.g. when you use runST.
the problem occurs because ($) has a monomorphic (non-overloaded)
type: ($) :: (a -> b) -> (a -> b)
now consider the type of runST (same example applies to your problem bellow, but with constraints)
runST :: (forall s. ST s b) -> b
now if we were to apply ($) to runST, we must make sure that
the type of runST is at least as polymorphic as what is required by ($),i.e.
(forall s. ST s b) -> b <= a -> b
(type on the left should be _more_ polymorphic, i.e. has _less_ elements hence the notation)
the above would be true, if
1. b <= b (which is ok)
2. a <= forall s. ST s b (which is not ok, as "a" is an arbitry _monomorphic_ type, and is not more polymorphic then a schema)
hope this helps, for details on the polymorphism & subtyping you may take a look at a number of papers
over the past few years. there are some on simon pj's page i forget the exact title, but it is easy to find.
-iavor
Per Larsson wrote:
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
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
