FunScript est une librairie de compilation en F# permettant aux développeurs d'écrire des applications Web "single-page" en F# et de les exécuter dans un navigateur ou sur un serveur via Node.js.
FunScript a deux composants : une librairie de compilation utilisée pour convertir le code F# en JavaScript et un Type Provider pour TypeScript utilisé pour exposer les APIs de diverses librairies JavaScript et le DOM en tant que types statiques.
Par exemple, un "Hello, World" écrit en FunScript ressemble à ceci :
[<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)
Chaque module est sauvegardé dans un fichier ".fs" et doit être annoté avec l'attribut FunScript.JS. On accède au DOM de la page via le type lib, la dernière ligne est utilisée pour lancer le système. Le module est stocké sur un simple serveur Web par défaut. Les modules FunScript peuvent être créés depuis Visual Studio, MonoDevelop ou un simple éditeur de texte.
La librairie est puissante en ce qu'elle permet au développeur d'interroger les types fournis via TypeScript et provenant de diverses librairies JavaScript, par exemple pour bénéficier de fonctions de complétion automatique ou de bulles d'aide. Actuellement, le projet FunScript sur GitHub contient les définitions de types pour le DOM HTML, jQuery, jQueryUI, Node.js, Google Maps et HighCharts, une librairie de graphiques interactifs en JavaScript. Une collection plus importante de définitions de types JS peut être trouvée ici.
Un autre avantage de l'utilisation de FunScript pour les applications Web, c'est la possibilité d'utiliser les génériques de F# et ses possibilités en matière de programmation asynchrone. Le développeur peut aussi travailler avec de la donnée JSON et des APIs REST grâce aux Types Providers de F# 3.0. Et tout ceci, en profitant de la concision de F#.
Le site Web de FunScript présente tout un ensemble d'exemples, dont Diagrammes pour les données de WorldBank avec F# et Rechercher dans la base de films The Movie Database avec F# et bien d'autres exemples peuvent être trouvés sur la page du projet sur GitHub.
FunScript est un projet Open Source sous licence Apache Licence 2.0.