F# and the API reference
There is no generated API reference for SodaFlow.FSharp on this site. That is deliberate,
and it is worth explaining, because the F# surface is a first-class part of this library rather
than an afterthought.
Why not
DocFX reads compiled metadata. Pointed at an F# assembly it renders the compiled shape,
not the F# one: modules appear as static classes, curried functions appear as methods taking
FSharpFunc<_,_>, and idiomatic pipelines are nowhere to be seen. The result actively misleads
an F# reader.
That is now the only reason. SodaFlow.FSharp and SodaFlow.FSharp.Async are fully documented
with /// comments, so the XML they emit is complete — every module, type and function carries a
summary along with its parameters, return value and remarks. Your editor shows all of it today;
what is missing is a renderer that presents the F# surface as F#.
What to read instead
The F# surface is covered in the conceptual pages, which show C# and F# side by side —
start with Getting started. Beyond that, the source is short, documented and
readable: one file per type under src/FSharp/SodaFlow.FSharp.
Two spellings exist for every operation:
// Qualified module functions.
let c = s |> Stream.hold 0
let l = c |> Cell.listen (printfn "%d")
// Suffixed aliases, from the [<AutoOpen>] module in Shorthand.fs.
let c = s |> holdS 0
let l = c |> listenC (printfn "%d")
The suffix names the type operated on — S stream, C cell, B behavior, L listener,
T transaction. Shorthand.fs is the single file listing every alias, and it doubles as the best
available index of the F# API.
What it would take to fix this
Generate with fsdocs rather than DocFX, and
publish it under its own path. fsdocs reads F# source and signatures rather than compiled
metadata, so it renders modules as modules and curried functions in their F# form, and it picks up
the same /// comments already in the source.
The prerequisite — writing those comments — is done. What remains is wiring the generator into the docs build.