Perhaps it wouldn't be as all-wonderful as I think, but as a "new" Haskell user, I am constantly switching back and forth between various definitions of things trying to compare documentation and files...

The purpose of "expansion" as I was explaining it is not to *permanently replace* what is in the text, but rather to *temporarily replace* it. I imagine it kind of like a "zoom in" for code. You could "zoom in" on one function, and seeing a new function that you don't recognize, "zoom in" again, and so on. Once done, you would hit "ESC" to make it all return as it was.

BTW, I do like your suggestion of tooltip types. That would be very handy!

Duane Johnson

On Apr 2, 2009, at 6:24 PM, Zachary Turner wrote:

It seems like a neat feature, and it could just be my inexperience with Haskell but it doesn't seem "killer". For example, why would you want to expand readLine like that if you already have it defined? It seems to defeat much of the benefit of functional languages in the first place, which is that it's so easy to reuse code by composing functions into new functions. I can see the case where you're passing all constants to a function, because then supposedly inlining it might be more efficient, but I would think the compiler would optimize most of the cases for you anyway.

One feature that I -do- think would be killer though, is the ability for the editor to do a mouse-over tooltip of a) function definitions, and b) arbitrary expressions. So like in your example above, hovering the mouse over `minus` in the expression p1 `minus` p2 would pop up a two line tooltip that looked like this

minus :: (Num a, Num b, Num c) => (a,b,c) -> (a,b,c) -> (a,b,c)
minus :: first -> second -> (a,b,c)

Something along those lines. It's nice to be able to see names of function arguments without having to navigate away from the line you're editing. This isn't the killer yet though since it's actually pretty standard for most sufficiently advanced programming language IDEs. The killer is that the mouse-over event would also look one line above the function definition for a comment. It would then scan backward until it finds no more comments. It would then display that text above the function definition. It's great having a type signature, but comments would just be icing on the cake.

For arbitrary expressions, suppose you had the following function:

replaceItem :: [a] -> (a -> Bool) -> a -> [a]
let replaceItem xs pred = (: filter (not.pred) xs)

You then highlight the text "filter (not.pred)" and hover over the highlighted text. The mouse then pops up a tooltip that says "[a] - > [a]". That would be killer IMO



On Thu, Apr 2, 2009 at 7:01 PM, Duane Johnson <duane.john...@gmail.com> wrote: So I was thinking about a "killer feature" for a text editor. Wouldn't it be neat if you could expand function calls into their definitions, in-place?

For example, suppose we have "minus" defined like so, somewhere in another file:

minus (a, b, c) (x, y, z) = (a - x, b - y, c - z)

Later, we make use of the function in our current context:

let p1 = (1, 2, 3)
    p2 = (4, 5, 6)
in p1 `minus` p2

By telling the editor to "expand" the minus, we get a temporary replacing of the above with:

(1 - 4, 2 - 5, 3 - 6)

Another example:

 parse s = map readLine ls

And supposing that readLine is defined somewhere else, moving the cursor to readLine in the line above and "expanding" becomes:

 parse s = map (\line -> words $ dropWhile (== ' ') line)

This is all pretty standard for the kinds of things we do in Haskell to work it out by hand, but is there any reason the parser couldn't do this? I think it would be even harder to do automatically in any other language. Maybe it's already been attempted or done?

Curious,

Duane Johnson

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to