Last active
November 1, 2022 18:11
-
-
Save dsyme/9b18608b78dccf92ba33 to your computer and use it in GitHub Desktop.
Working self-contained getting-started sample for Suave Web Scripting
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//========================================== | |
// Working fully self-contained getting-started example for Suave Web Server scripting | |
// | |
// Note you don't need to have _anything_ installed before starting with this script. Nothing | |
// but F# Interactive and this script. | |
// | |
// This script fetches the Paket.exe component which is referenced later in the script. | |
// Initially the #r "paket.exe" reference is shown as unresolved. Once it has been | |
// downloaded by the user (by executing the first part of the script) the reference | |
// shows as resolved and can be used. | |
// | |
// Paket is then used to fetch a set of F# packages, which are then used later in the script. | |
// | |
//------------------------------------------ | |
// Step 0. Boilerplate to get the paket.exe tool | |
open System | |
open System.IO | |
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__ | |
if not (File.Exists "paket.exe") then | |
let url = "https://github.com/fsprojects/Paket/releases/download/0.26.3/paket.exe" | |
use wc = new Net.WebClient() | |
let tmp = Path.GetTempFileName() | |
wc.DownloadFile(url, tmp); | |
File.Move(tmp,Path.GetFileName url) | |
// Step 1. Resolve and install the packages | |
#r "paket.exe" | |
Paket.Scripting.Install """ | |
source https://nuget.org/api/v2 | |
nuget Suave 0.16.0 | |
nuget FSharp.Data | |
nuget FSharp.Charting | |
""";; | |
// Step 2. Use the packages | |
#r "packages/Suave/lib/Suave.dll" | |
#r "packages/FSharp.Data/lib/net40/FSharp.Data.dll" | |
#r "packages/FSharp.Charting/lib/net40/FSharp.Charting.dll" | |
let ctxt = FSharp.Data.WorldBankData.GetDataContext() | |
let data = ctxt.Countries.Algeria.Indicators.``GDP (current US$)`` | |
open Suave // always open suave | |
open Suave.Http.Successful // for OK-result | |
open Suave.Web // for config | |
web_server default_config (OK (sprintf "Hello World! In 2010 Algeria earned %f " data.[2010])) | |
Awesome! Here's the same gist using Paket 0.26.3, resulting into less lines of code.
very cool. I used it in http://www.navision-blog.de/blog/2014/10/14/retrieving-github-download-counts/
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage
Run
fsi.exe
and specify the filename of the script, so that F# interactive reads the code and executes the script in real time:Output:
Appendix
Why not
#load
the script inside F# interactive?Loading the script inside an F# interactive session can result in the following error: