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).
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).