[GHC] #13360: Add a flag to enable inferring HasCallStack constraints

GHC ghc-devs at haskell.org
Mon Nov 13 14:11:34 UTC 2017


#13360: Add a flag to enable inferring HasCallStack constraints
-------------------------------------+-------------------------------------
        Reporter:  gridaphobe        |                Owner:  (none)
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:  8.4.1
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:
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 gridaphobe):

 Replying to [comment:30 bgamari]:
 > > So, how do we take it forward from here? Is it possible to have
 HasCallStack automatically for functions in IO and/or above a certain cost
 threshold?
 >
 > I think we'll need to define the criterion here a bit more precisely. In
 particular, it's not clear that doing this in a completely type-driven way
 makes sense. For instance, what about a function in `MaybeT IO`?

 Yeah, and it gets even worse when you think about things like `MonadIO`,
 `MonadBaseControl`, etc.

 > Using a size-threshold sounds plausible but feels a bit ad-hoc.

 I agree. I'm pretty reluctant to tie a user-facing feature like
 `HasCallStack` to GHC's size heuristics, that would make it quite
 difficult for users to reason about which functions will get an automatic
 constraint. And worse, there doesn't seem to be any reason to expect a
 size heuristic to produce a proper **chain** of callstack-aware functions.

 > However, this does raise a question: What prevents you from just using
 cost center stacks?

 Well, cost-center stacks require the entire world to have been compiled
 with `-prof`, which can be pretty time-consuming. In contrast,
 `HasCallStack` could be enabled on a per-module basis while maintaining
 interoperability with non-`HasCallStack` code. I feel like this could be a
 useful debugging tool, though it is somewhat limited in scope, i.e. in the
 limit it clearly devolves to a manual version of the `-prof` way.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13360#comment:34>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list