
if a function is ill-typed, try replacing the first -> with a =>. If
#11715: Constraint vs * -------------------------------------+------------------------------------- Reporter: bgamari | Owner: Type: bug | Status: new Priority: high | Milestone: 8.2.1 Component: Compiler (Type | Version: 8.0.1-rc1 checker) | Resolution: | Keywords: Typeable Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by goldfire): Ah. I suppose comment:40 was clear from the beginning, but your {{{ f :: Int -> ... helper :: Int => ... }}} (without bodies) confused me. Perhaps we can phrase your intent in terms of implicit parameters: a "type" (as opposed to a constraint) appearing left of `=>` is just like an implicit parameter with a distinguished name `""`. Now, understanding `with 3 $ with 4 $ ...` is easy: the `...` will have access to `4`, which shadows `3`. I'm not saying it would necessarily be ''implemented'' like implicit parameters, but our understanding of IPs can inform this new feature. As for your suggestion this makes the function well-typed, adjust the error message accordingly. I'm afraid this would be hard to implement, because types can appear in so many different contexts. But here's an idea: We add a "validity" check -- something not really part of the type system -- that looks for types like `Ord a -> a -> Set a`. The validity check will fail if it sees a type to the left of an `->` that is headed by a class. To disable the validity check, enable `-XExplicitDictionaries`. But the error message would suggest using `=>` more prominently than enabling `-XExplicitDictionaries`! This validity check might not catch all cases all the time, but it would catch the common newbie error Edward brought up. Thinking about `Int =>` as a special implicit parameter makes this more palatable to me, somehow. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11715#comment:41 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler