
#11035: Add implicit call-stacks to partial functions in base -------------------------------------+------------------------------------- Reporter: gridaphobe | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.2 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 nomeata): How about we stay on top of the slipperly slope for a while, and let people experiment with their call-stack enabled custom Preludes first for a while? In fact, what I do not like about {{{ ghci> minimumBy compare [] *** Exception: Prelude.foldr1: empty list CallStack: error, called at libraries/base/GHC/List.hs:999:3 in base-4.8.2.0:GHC.List }}} is that it leaks implementation details. This is great in your own code, but a polished library should _not_ leak a call stack about its details; it should either print plain exception or the call stack that finishes at the library’s API. At least for “expected exceptions” like `"empty list"`. So I would say what we have to do here is to prevent this call to error from adding a call stack. For that, uses of `error` in library functions¹ should explicitly use `let ?foo::CallStack = emptyCallStack in error "..."` to prevent the constraint solver from adding an implementation- leaky call-stack here (if that even works, maybe what I want to achieve here requires modifications to the solver). ¹ Of course, precisely those that do not propagate the `?_::CallStack` constraint to the caller. If we decide to do that, then everything is fine. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11035#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler