code-as-config, run-time checks and error locations

Dear Café, I'm working on a EDSL that will include both type checks (at compile time) and semantic checks (at run time). - Semantic properties are known at compile time but feel too complex to me to be encoded in the type system. If one of the runtime checks fails, I'd like to print the location of the error, i.e. not Error: Unknown field `AMOUNT' in table `ENTRIES' (where? why?) but Error: Unknown field `AMOUNT' in table `ENTRIES' Referenced at analysis1.hs:43:7 by `sumByInvoice' which was called at analysis1.hs:66:3 by `main' ENTRIES defined at analysis1.hs:13:8 I'm not yet sure which level of granularity I want for error messages and one can probably get arbitrarily fancy on this. For the moment I think it would be enough to auto-insert the location of calls to a certain set of functions. Any experience on this? Thanks a lot. -- Steffen

On Sun, Apr 7, 2013 at 12:23 AM, Steffen Schuldenzucker
For the moment I think it would be enough to auto-insert the location of calls to a certain set of functions.
Have you tried assert [1]? [1] http://hackage.haskell.org/packages/archive/base/4.6.0.1/doc/html/Control-Ex... -- Kim-Ee

Good Point! Doesn't quite meet my requirements (I don't want to show the error loc somewhere deep within the libs), but it led me here[1]. Reading through that now... [1] http://hackage.haskell.org/trac/ghc/wiki/ExplicitCallStack On 04/06/2013 07:51 PM, Kim-Ee Yeoh wrote:
On Sun, Apr 7, 2013 at 12:23 AM, Steffen Schuldenzucker
wrote: For the moment I think it would be enough to auto-insert the location of calls to a certain set of functions.
Have you tried assert [1]?
[1] http://hackage.haskell.org/packages/archive/base/4.6.0.1/doc/html/Control-Ex...
-- Kim-Ee

On Sun, Apr 7, 2013 at 4:37 AM, Steffen Schuldenzucker
Reading through that now... [1] http://hackage.haskell.org/trac/ghc/wiki/ExplicitCallStack
If you're reading that page, you probably also want to get up to speed on the latest. The thread titled "RFC: rewrite-with-location proposal" just ended recently [1]. [1] http://www.haskell.org/pipermail/haskell-cafe/2013-February/106617.html -- Kim-Ee

This one[1] sounds so awesome! I just read the paper. In particular I like how one could access the current call stack structure live. However, the most recent changes to the code are from early 2009. Anyone knows what happened to this? [1] http://hackage.haskell.org/trac/ghc/wiki/ExplicitCallStack/CorePassImplement...

Hi Steffen, most of the time I'm just using these cpp macros: #define __POS__ (__FILE__ ++ ":" ++ show __LINE__) #define ERROR error $ __POS__ ++ " -> " ++ Instead of writing 'error "blub"' you would write 'ERROR "blub"' and additionally get the file name and the line. There's a bracktracing functionality in the more recent versions of ghc. I think it has been discussed on this mailing list. Greetings, Daniel
participants (3)
-
Daniel Trstenjak
-
Kim-Ee Yeoh
-
Steffen Schuldenzucker