
#11049: Allow CallStacks to be hidden or cut -------------------------------------+------------------------------------- Reporter: nomeata | Owner: gridaphobe 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: #11035 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by gridaphobe): I think this is an interesting idea, and I think it could be implemented entirely in `base` without any additional compiler support. So I'm in favor of doing it; we can let users decide if the implementation hiding feature is useful. The one wrinkle is that this will only work when we have a full call- stack, ie every function in the path from `readConfig` to `error` '''must''' take a call-stack. Otherwise the chain will be broken (remember, call-stacks are just implicit parameters with a special rule for function calls) and we'll still see a partial call-stack. For example, if I change your example so that `readFile` does not take a call-stack {{{#!haskell readFile :: FilePath -> IO String readFile f = ... error "file not found" ... readConfig :: IO Config readConfig = do s <- let ?callstack = rootCallStack in readFile "config.txt" -- line 42 return (parseConfig s) }}} `readConfig` will still print a call-stack that leaks internals if `config.txt` does not exist. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11049#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler