I have thought about possible directions of FSI development. I have some ideas that I would like to share and discuss.
In general, it would be great to make FSI more than just an execution shell. It can become a really powerful development tool. What exactly we can do:
1) Session Save/Load functionality
It will be nice to have an ability to save current FSI state into the file and continue work in the next time.
2) Native C# interaction with FSI saved sessions
It could sound crazy, but it would be cool to save FSI session to assembly and provide an easy C#-F# interaction with such assemblies. For example, it might be useful for Machine Learning tasks. You will be able to create, train and tune your model directly from FSI then save it to assembly and use it from your C# application.
3) Current environment overview
Provide an ability to see the difference between current FSI state and default state. For example:
- Print all declared variables with their values
- Print all declared function with their signatures
- Print list of referenced assemblies with included directories
- Provide an ability to print function’s body
There is a tool that provides a part of this functionality. This is FsEye – a visual object tree inspector for the F# Interactive.
4) Intellisense for FSI
5) Detailed type provider description
One of the main cons in type providers is impossibility to explore the schema of the provided world. For example, I want to use Freebase type provider, but I do not know the nature of the provided types. I cannot use provided types fully, because I do not know what data they have.
I am pretty much sure that we need to supply a way to explore provided types. This feature for sure should be tightly integrated with F# IDEs (into Object browser for example).
6)Interactive help
All we use MSDN to understand how things work. We copy type name + function name and paste them to Google, find first MSDN link and go there. Why cannot we teach FSI to do it? We just need to build an easy syntax for that.
7) The ability to use the load directive inside of modules\functions (by @davidkl_)
P.S. I will be happy to hear your feedback or new ideas. Feel free to post comments here or to contact me in twitter (@sergey_tihon).
That’s great, but I would also add GUI to the list. Currently, as far as I understand, we only have a console version of FSI outside of VS.
No, FSI is well integrated with VS from the VS2010. http://screencast.com/t/2rLFPkv0x
I’ve meant another thing 🙂 I talking about running fsi.exe by itself, without VS.
And about integration: it will be nice, if FSI could automatically load referenced in VS F# project assemblies, when you open the project.
Finally, I will probably try to make F# plugin for LightTable (http://www.lighttable.com/) when it will be ready.
Sorry, but how such FSI UI will differ from MonoDevelop (for example)?
Maybe ‘F# Add Reference Addon’ can help you a bit with references in FSI – http://apollo13cn.blogspot.com/2012/08/f-add-reference-addon.html .