Open5

F#6.0

task{...}

いわゆるtaskbuilder.fsが標準で使えるようになった。
以下はOpenBDから本の情報を取ってくるコード。

open System.Net.Http

let client = new HttpClient()

let getBookData isbn =
    let url = $"https://api.openbd.jp/v1/get?isbn={isbn}&pretty"

    task {
        let! result = client.GetStringAsync(url)
        return result
    }

[<EntryPoint>]
let main _ =
    let isbn = "978-4-7808-0204-7"
    let t = getBookData isbn
    t.Wait()
    let json = t.Result
    printfn "%s" json
    0 

https://github.com/fsharp/fslang-design/blob/main/FSharp-6.0/FS-1087-resumable-code.md
"resumable code"と呼ばれる基盤の上で作られているらしい。コンピュテーション式(computation expressions)の高速化のための機能で、言語の構文やメタデータには影響を与えない、コンパイラで用いられる機能のようだ。

暗黙の型変換

op_Implicitが自動的に呼ばれるようになった。
なので、MemoryMarshal.AsBytes("Hello")のようにReadOnlySpan<char>が必要なところでstringを渡しても暗黙的に変換してくれる。

let i64Array : int64[] = [|1; 2; 3; 4; 5; 0xfffffff|]

こういうこともできるようになったが

let x : int64 = 1 + 2 

これはNG

参照セルの:=!rといった演算子を使うとIDE上でメッセージが出るようになる。

作成者以外のコメントは許可されていません