[Haskell-cafe] What features should an (fictitious) IDE for Haskell have?

Olaf Klinke olf at aatal-apotheke.de
Tue Dec 8 20:36:35 UTC 2020


On 20-12-07 18:22, André Popovitch wrote:
> One feature I've always wanted would be able to "manually inline" a
> function. For example, if I have
> 
>     foo a = a + a
>     bar = foo 3
> 
> I'd like to be able to right-click on the invocation of `foo` and
> select
> some option to inline it, rewriting the file to read
> 
>     foo a = a + a
>     bar = 3 + 3
> 
> I think this would make it simple to dive into an abstraction to see
> what's
> really going on. For example, imagine a new user is confused by this
> expression:
> 
>    Just 3 >> Just 4
> 
> They could right-click on `>>` to see that it is identical to:
> 
>     case Just 3 of
>         Just _ -> Just 4
>         Nothing -> Nothing
> 
> 
> Which would allow them to easily see that this expression will always
> evaluate to "Just 4" (and hopefully simplify it). Enlightened, they
> could
> then hit ctrl-z to revert the code to its original state.
> 
> Haskell's purity and laziness makes it one of the only mainstream
> languages
> where equational reasoning is really possible, so this feature would
> play
> on Haskell's strengths and provide a feature that couldn't be
> replicated in
> other languages' IDEs. It would also allow new users to more easily
> dive in
> and understand certain abstractions (although how it would work in
> many
> cases would be hard to determine).

+1 for this. It is like a step-by-step evaluation/debugger but limited
to function calls at the syntactic level. I can image so many past
situations where this would have prevented lots of head-scratching. 
This hypothetical IDE feature might go well with a tree view where
inlining a function application is equivalent to expanding a level in a
tree (within the same source line number), like so:

Folded: [+] button appears on mouse over "foo".
   bar = foo[+] 3

Expanded: One code line now occupies two lines in the IDE window. [-]
button reverts code to previous state.
   bar = foo 3
         [-] 3 + 3

I've seen similar things in action in a demo implementation of [1,2].
Also great for teaching, I guess. 

Olaf

[1] https://www.cs.bham.ac.uk/~pbl/papers/functionalexplainsupp.pdf
[2] https://dl.acm.org/doi/10.1145/3110258



More information about the Haskell-Cafe mailing list