FunScript はF#コンパイラのライブラリで開発者はF#で単一ページのウェブアプリケーションを作成でき、それを Node.jsを介してブラウザ内、あるいはサーバー上で実行できる。
FunScriptは2つのコンポーネントを持つ。コンパイラライブラリは、F#コードをJavaScriptに変換するために使われ、TypeScriptタイププロバイダが様々なJavaScriptライブラリのAPIと静的な型としてDOMを公開するのに使われる。
FunScriptで書かれた “Hello, World”の例は以下のようになる。
[<FunScript.JS>]
module Page
open FunScript
open FunScript.TypeScript
type lib = Api<"lib.d.ts">
let hello () = lib.window.alert("Hello, World!")
do Runtime.Run(components=Interop.Components.all)
各モジュールは、 “.fs” ファイルに保存され、FunScript.JS 属性でアノテートされなければならない。ページの DOM 型lib
を介してアクセスされる。最後の行は、ランチャーを起動するために使われる。モジュールは、デフォルトでは、単純なWebサーバー上に格納される。
FunScriptモジュールは、Visual Studio、MonoDevelopあるいは単純なテキストエディタで作成することができる。ライブラリは強力になる。なぜならそれを使って、開発者はさまざまなJavaScriptライブラリで見つかった型を調べることができ、自動補完やツールチップ機能にあくせすできるからだ。型はTypeScript経由で提供され、現在、FunScript GitHubプロジェクトは、HTML DOM、jQuery、jQueryUI、Node.js、Google Maps、そしてJavaScriptチャートとやりとりできる HighCharts用の型定義を持っている。ずっと大きなコレクションであるJSの型定義は、ここにある。
WebアプリケーションにFunScriptを使う別の利点は、F#のジェネリックスと非同期プログラミングの機能を使えることである。また、開発者は、F#の型プロバイダを使ってJSONデータとREST APIを扱うことができる。F#の簡潔さを維持しながら、その全てを使える。
FunScriptのウェブサイトには、幾つものサンプルその中には、F#によるWorld Bank データのグラフ化 とF#によるThe Movie Database の検索がある。その他のサンプルは、プロジェクトの GitHubページにある。
FunScriptは、Apache License 2.0の下でライセンスされたオープンソースプロジェクトである。