Skip to content

Latest commit

 

History

History
60 lines (39 loc) · 2.55 KB

File metadata and controls

60 lines (39 loc) · 2.55 KB

F# Interactive Dependency Manager Plugins

Since F# 5.0, dotnet fsi and FsiAnyCPU.exe (the .NET Framework variant) ships with dependency manager plugins support that can be called like so:

#r "myextension: my extension parameters"

For F# Interactive to load the extensions1, they either need to:

  • be deployed next to fsi.dll of dotnet SDK (or next FsiAnyCPU.exe for .NET Framework)
  • refered to via --compilertool:<extensionsfolderpath>2 argument

The same goes for the tooling hosting F# Compiler Service.

The initial RFC for this feature overviews how it is designed.

More about F# Interactive References

The current implementation follows pattern that can be deducted by referring to implementation in DependencyProvider.fs; due to the system working without having a statically linked dependency, it uses a late binding approach leveraging runtime reflection to identify if an extension conforms to patterns understood by the specifics of the compiler implementation.

#r "nuget:" nuget

Reference nuget packages, ships by default with dotnet fsi.

#r "nuget: Newtonsoft.Json"
// Optionally, specify a version explicitly
// #r "nuget: Newtonsoft.Json,11.0.1"

open Newtonsoft.Json

let o = {| X = 2; Y = "Hello" |}

printfn "%s" (JsonConvert.SerializeObject o)

#r "paket:" paket

Reference dependencies (nuget, git, gist, github) through Paket package manager.

Learn how to use Paket FSI integration.

#r "paket: nuget FSharp.Data"

open FSharp.Data

type MyCsv = CsvProvider<"""
X,Y
2,Hello
4,World
""">

for r in MyCsv.GetSample().Rows do
  printfn "%i = %s" r.X r.Y

Footnotes

  1. Referencing packages in F# Interactive

  2. F# Interactive options