Raj
Last changed: -192.131.85.3

.
Summary

fsi.exe starts up a traditional command line interpreter for F#. Except it's not an interpreter - it generates real native code via JIT compilation to .NET IL. Here is the splash screen and a trivial execution:

  C:\fsharpv2>bin\fsi


  MSR F# Interactive, (c) Microsoft Corporation, All Rights Reserved
  F# Version 1.9.2.9, compiling for .NET Framework Version v2.0.50727


  NOTE:
  NOTE: See 'fsi --help' for flags
  NOTE:
  NOTE: Commands: #r <string>;;    reference (dynamically load) the given DLL.
  NOTE:           #I <string>;;    add the given search path for referenced DLLs.


  NOTE:           #use <string>;;  accept input from the given file.
  NOTE:           #load <string> ...<string>;;
  NOTE:                            load the given file(s) as a compilation unit.
  NOTE:           #time;;          toggle timing on/off.
  NOTE:           #types;;         toggle display of types on/off.
  NOTE:           #quit;;          exit.
  NOTE:
  NOTE: Visit the F# website at http://research.microsoft.com/fsharp.
  NOTE: Bug reports to fsbugs@microsoft.com. Enjoy!  


  > let rec f x = (if x < 2 then x else f (x-1) + f (x-2));;


  val f : int -> int


  > f 6;;


  val it = 8


  val it : int

You can exit fsi via: '#quit;;' OR '#q;;' OR 'exit 0;;' .

You can load, then open files thus: #load "my_file.fs";; open My_file''. Note that a file without defined modules has an implicit module name. The implicit module is named by capitalizing the filename and dropping the extension. After loading a file, you will need to open it, to use its contents.

Alternatively, you can load when invoking fsi: c:\> fsi my_file.fs . Then, when fsi is running: 'open My_file;;'.

You can dynamically load new DLLs (.NET libraries) into fsi using #r. For example, you can use the following to load up ManagedDirectX (path depends on which version of DirectX you've got)

  #I @"C:\WINDOWS\Microsoft.NET\Managed DirectX\v9.05.132" ;;
  #r @"Microsoft.DirectX.dll";;
  #r @"Microsoft.DirectX.Direct3D.dll" ;;
  #r @"Microsoft.DirectX.Direct3Dx.dll" ;;

Some things are a bit quirky with FSI. Like the OCaml top level you need to enter ";;" a lot. You also need to add a ";;" immediately after all "open" declarations:

  open Microsoft.DirectX
  open Microsoft.DirectX.Direct3D
  open System.Drawing;;

You can even enter classes directly. For example

  type StartStop(x:int) = 
    class 
      let y = x + 10
      member obj.XY = (x,y)
    end