Axial.Hosting.GenHttp
0.11.3
Prefix Reserved
dotnet add package Axial.Hosting.GenHttp --version 0.11.3
NuGet\Install-Package Axial.Hosting.GenHttp -Version 0.11.3
<PackageReference Include="Axial.Hosting.GenHttp" Version="0.11.3" />
<PackageVersion Include="Axial.Hosting.GenHttp" Version="0.11.3" />
<PackageReference Include="Axial.Hosting.GenHttp" />
paket add Axial.Hosting.GenHttp --version 0.11.3
#r "nuget: Axial.Hosting.GenHttp, 0.11.3"
#:package Axial.Hosting.GenHttp@0.11.3
#addin nuget:?package=Axial.Hosting.GenHttp&version=0.11.3
#tool nuget:?package=Axial.Hosting.GenHttp&version=0.11.3
Axial
<picture> <source media="(prefers-color-scheme: dark)" srcset="docs/content/img/axial-readme-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/content/img/axial-readme-light.svg"> <img alt="Axial" src="docs/content/img/axial-readme-light.svg" width="160"> </picture>
Write asynchronous F# workflows whose expected failures and required dependencies are visible in their types.
Axial is pre-1.0 and its API may change before the first stable release.
Your first flow
A handler usually needs services and can fail, but a Task signature shows neither fact. Flow<'env, 'error, 'value>
makes both part of the contract.
open Axial
type CheckoutError =
| OrderNotFound of orderId: int
| PaymentDeclined of reason: string
type Receipt = { OrderId: int; Total: decimal; Reference: string }
type CheckoutEnv =
{ FindTotal: int -> ColdTask<Result<decimal, CheckoutError>>
Charge: decimal -> ColdTask<Result<string, CheckoutError>>
Clock: IClock }
interface IHasClock with
member this.Clock = this.Clock
let checkout orderId : Flow<CheckoutEnv, CheckoutError, Receipt> =
flow {
let! findTotal = Flow.envWith _.FindTotal
let! charge = Flow.envWith _.Charge
let! total = findTotal orderId
let! reference = charge total
return { OrderId = orderId; Total = total; Reference = reference }
}
The application supplies live functions. A test supplies a record of fakes. The workflow does not change.
Adding a timeout and a retry policy leaves the Flow<CheckoutEnv, CheckoutError, Receipt> signature unchanged — these
combinators only require the environment to provide a clock (IHasClock) — because the runtime that starts the
workflow owns cancellation, retries, and cleanup:
open System
let checkoutOrder orderId : Flow<CheckoutEnv, CheckoutError, Receipt> =
checkout orderId
|> Flow.retry (Schedule.recurs 2)
|> Flow.timeout (TimeSpan.FromSeconds 5.0) (PaymentDeclined "checkout timed out")
Flow also carries concurrency, scheduling, streams, and structured child fibers through the same runtime.
Install
dotnet add package Axial
Package family
Axial: the core workflow model: typed failures, dependencies, concurrency, resources, schedules, and streams.Axial.Process: external process composition, pipelines, streaming output, typed failures, cancellation, and cleanup.Axial.HttpClient: typed HTTP requests, response handling, and reliability policies.
Experimental Axial.Hosting.AspNetCore and Axial.Hosting.GenHttp host Reified HTTP contracts on Axial workflows. Supporting packages provide platform services, console and file-system access, hosting, telemetry, and layers. See the package maturity table for each package's rating and application evidence. The package catalogue links the first-class libraries and the complete compatibility matrix.
Documentation and examples
- Getting started
- Add Axial to an existing Task application
- Failures and defects
- Dependencies and services
- Concurrency
- Process
- HTTP client
- Runnable examples
- Integration reference application and HTTP host examples
Reified integration
Reified declares value, model, JSON, and HTTP contracts. Axial's optional server adapters execute Reified HTTP contracts as workflows; neither core depends on the other.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Axial (>= 0.11.3)
- FSharp.Core (>= 10.1.402)
- GenHTTP.Api (>= 10.5.3)
- GenHTTP.Modules.IO (>= 10.5.3)
- Reified.Data (>= 0.11.0)
- Reified.Schema (>= 0.11.0)
- Reified.Schema.Http (>= 0.11.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.