Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I implement an F# Read Eval Print Loop (REPL)?

I would like to add an F# REPL to my application for live debugging purposes. I am looking at the source code for fsi.exe (F# Interactive) and there is a ton of stuff going on that looks like it pokes around with F# compiler internals. I cannot get this same code to compile in the context of our application because of this.

Is there a nice simple example of implementing an F# REPL somewhere? I would have hoped for this to be fairly easy.

like image 790
pauldoo Avatar asked Feb 15 '11 16:02

pauldoo


People also ask

HOW IS F value calculated?

The F value is used in analysis of variance (ANOVA). It is calculated by dividing two mean squares. This calculation determines the ratio of explained variance to unexplained variance.


2 Answers

The short answer is that F# (unfortunatelly) doesn't currently provide any API for hosting F# Interactive in your applications. There are a lot of people asking for this - see for example this SO question.

There are essentially two things you could do about that:

  • You can modify the open-source release and compile fsi.exe as some DLL library that would provide the API you need. This isn't simple task - F# Interactive is tightly bound with the compiler (it compiles code you enter on the fly), but it should be doable to encapsulate the types implementing REPL into some type you could call (But you cannot just take some file out of it - you need to compile entire F# to get this working).

  • You can run fsi.exe as a separate process as Visual Studio does and send commands to it using standard input/output. You can get some more flexibility by loading your library when fsi.exe starts. The library could use .NET Remoting to connect back to your application and expose some data.

Unfortunatelly, these two options are probably the only things you can do at the moment.

EDIT I was thinking that I already answered this question somewhere (perhaps in email), but couldn't
find it! Thanks to Mauricio who found the exact duplicate (even with my duplicate answer... Doh!)

like image 85
Tomas Petricek Avatar answered Oct 31 '22 14:10

Tomas Petricek


I've written a series of blog posts about using the open source F# interactive executable inside and WPF application.

The code base is available on github - https://github.com/oriches/Simple.Wpf.FSharp.Repl

The series of blog posts are:

http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-1.html

http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-2.html

http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-3.html

The final post is to follow soon.

like image 36
AwkwardCoder Avatar answered Oct 31 '22 14:10

AwkwardCoder