Skip to content

Inliterate roadmap

Tom Nielsen edited this page Oct 21, 2017 · 1 revision

Easy:

  • line numbers in error messages - #31. This would mean using a different markdown parser which preserves the line numbers for the code blocks, and then just inserting GHC LINE pragmas in the generated source code.
  • Ability to change the underlying monad. I would like to be able to run the do blocks in any monad, for instance one which is a reader monad over a database connection for exploring a database. I think this can be done quite simply with a custom block which changes the first call in the generated main function.
  • Slide output
  • Different themes

Hard:

  • caching computations with dependency tracking. Essentially we want to (1) not rerun long computations every time we evaluate the document (2) only rerun computations when we need to because the free variables in the expressions that define them have changed. One strategy (which we used with BayesHive) is to internally rename every variable to append hash of all the free variables in that expression (recursively). That way you know whether the value has can have changed and should be recalculated. That may be doable but is hard. To make it extra difficult, what about variables where we don't know how to serialise them. For instance, we might bind a function in a do block, but we can't serialise functions. Perhaps one can create a type class of things that may be serialisable, including all types?
Clone this wiki locally