Sub-cards (0)Archived
Comments (3)

Causal profiling to spot parallelization opportunities

  • Documentation/API browser

  • Search by type (Hoogle)

  • Syntax highlighting

  • Test coverage

  • Case splitting, term synthesis


What tooling should a programming language have? Off the top of my head:

  • REPL

  • jump-to-definition

  • show a module graph

  • heap profiling

  • CPU profiling (+ flamegraph)

  • auto formatter

  • prune dependencies

  • autocompletion

  • step-through debugger (for imperative subroutines)

  • interactive single-step reduction (for pure functions)

Profile picture

Hot reload which in Haskell is provided by ghcid - but it is limited in that it doesn’t support loading multi-package projects (whatever happened with fendor’s GSoC project?).

Profile picture

Agreed about hot reload. After using it in TypeScript and IHP, I’m not sure I personally would ever use frameworks without hot reload (although I would be fine with inflicting them on other people).

Profile picture

Does ghcid actually count as hot reload? I would imagine you’d want to update a running application, not simply rebuild.

Profile picture

I think ghcid is a necessary prerequisite, but you’d also need support from the popular backend/frontend frameworks in your language, and I’m not sure how much of it is enabled by language features and how much is just “somebody bothered to implement it”.

It looks like in JS land at least, the hot reload functionality might be made easier by Webpack providing an API/smth for notifying about reloads:

Profile picture

I should have said - ghcid facilitates implementation of hot reload, as done in Obsidian’s obelisk and my own Ema (ghcid recompiles/re-runs backend, and the frontend is patched with new HTML from re-run through websocket).

You can see this in action by cloning and running bin/run (then change Main.hs or whatever, and see the browser patch instantly)

Profile picture

That clears things up, thanks!