A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://fable.io/ below:

Fable ยท JavaScript you can be proud of!


Fable is a compiler that brings F# into the JavaScript ecosystem

Features

These are some of the main F# features that you can use in your web apps with Fable.

Powerful pattern matching

These are some of the main F# features that you can use in your web apps with Fable.

type Face =
    | Ace | King | Queen | Jack
    | Number of int

type Color =
    | Spades | Hearts | Diamonds | Clubs

type Card =
    Face * Color

let aceOfHearts = Ace, Hearts
let tenOfSpades = (Number 10), Spades

match card with
| Ace, Hearts -> printfn "Ace Of Hearts!"
| _, Hearts -> printfn "A lovely heart"
| (Number n), Spades -> printfn "%d of Spades" n
| _, (Diamonds|Clubs) -> printfn "Diamonds or clubs"

// Warning:
// Incomplete pattern matches on this expression.
// For example, the value '(_,Spades)' may indicate
// a case not covered by the pattern(s).
Computation expressions

There's a lot of code involving continuations out there, like asynchronous or undeterministic operations. Other languages bake specific solutions into the syntax, with F# you can use built-in computation expressions and also extend them yourself.

// JS promises made easy
promise {
    let! res = Fetch.fetch url []
    let! txt = res.text()
    return txt.Length
}

// Declare your own computation expression
type OptionBuilder() =
    member _.Bind(opt, binder) =
        match opt with
        | Some value -> binder value
        | None -> None
    member _.Return(value) =
        Some value

let option = OptionBuilder()

option {
    let! x = trySomething()
    let! y = trySomethingElse()
    let! z = andYetTrySomethingElse()
    // Code will only hit this point if the three
    // operations above return Some
    return x + y + z
}
Units of measure

These are some of the main F# features that you can use in your web apps with Fable.

[<Measure>] type m
[<Measure>] type s

let distance = 12.0<m>
let time = 6.0<s>

let thisWillFail = distance + time
// ERROR: The unit of measure 'm' does
// not match the unit of measure 's'

let thisWorks = distance / time
// 2.0<m/s>
Type providers

Build your types using real-world conditions and make the compiler warn you if those conditions change.

[<Literal>]
let JSON_URL = "https://jsonplaceholder.typicode.com/todos"

// Type is created automatically from the url
type Todos = Fable.JsonProvider.Generator<JSON_URL>

async {
    let! (_, res) = Fable.SimpleHttp.Http.get url
    let todos = Todos.ParseArray res
    for todo in todos do
        // Compilation fails if the JSON schema changes
        printfn $"USER: {todo.userId}, TITLE {todo.title}, COMPLETED {todo.completed}"
}
Users of Fable

These are some of the projects and companies using Fable. Send us a message to include yours!


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4