Skip to content
CAI
Software that uses CAICheck a score

fsprojects/FSharpx.Extras

54.4

Adequate · 23 September 2026

5.5k

lines of production code

F#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the FSharpx.Extras library, a functional programming toolkit for the .NET platform that provides composable data types, monadic operators, and utility functions. It enhances C\# interoperability and supports structured data formatting, while maintaining comprehensive test coverage across multiple .NET versions.

Features

Add C\# interop helpers and functional utilities to FSharpx.Extras

The FSharpx.Extras library now includes a new CSharpCompat.fs module that provides extension methods to help the C\# compiler with Func and Action type inference, including conversions between Action/Func and F\# functions, and utility methods for Option types. Additionally, the update introduces functional programming utilities such as the Iteratee monad for stream processing, Lens combinators for data access, and a Pluralizer for English noun pluralization. The Prelude module is expanded with new functions like reraise' for exception handling, undefined for bottom values, and various parsing helpers for numeric and date types. The Enum module gains isDefined and toString helpers, while the IO module provides file system and text manipulation primitives. These changes enhance the library's support for functional programming patterns and C\# interoperability.

src/FSharpx.Extras · high confidence

Add structured formatting support for F\# types

The FSharpx.Text.StructuredFormat library is introduced, providing a structured formatting engine for F\# types. This includes the \Layout\ and \Joint\ types for representing formatted output, a \LayoutOps\ module with operators for combining layouts, and a \FormatOptions\ record to control formatting behavior. The library exposes functions like \any\_to\_string\ and \layout\_as\_string\ to convert any value to a human-readable structured string, enabling consistent and customizable display of F\# data structures.

src/FSharpx.Text.StructuredFormat · high confidence

Introduce FAKE-based build system for FSharpx.Extras

The project now uses a new FAKE build script (build.fs) to automate the build, test, and release process. This script defines targets for cleaning, building the library and tests, publishing to .NET Standard 2.0, running unit tests, and generating/publishing NuGet packages. It also includes logic for versioning and Git operations for releases.

build · high confidence

New computation expression builders for functional types

Added computation expression builders and monadic operators for \Async\, \Choice\, \Continuation\, \Enumerator\, \Nullable\, \Option\, \Reader\, \Result\, \State\, \Task\, and \Undo\ types. These provide a consistent, composable way to work with these types using standard monadic operators (e.g., \\>\>=\, \\<\*\>\). The \Validation\ module is updated to use the new \Result\ type instead of \Choice\ for error handling, and the \Task\ module restores \Task\ computation expression support as internal components.

src/FSharpx.Extras/ComputationExpressions · high confidence

Removals

Removal of F\# compiler and build infrastructure files

The XML documentation files for F\# Interactive settings and the F\# Core library have been deleted, along with the F\# interactive session configuration and the MSBuild targets file that defined the standard build process for F\# projects. These removals indicate that the bundled F\# compiler, its associated build tools, and related configuration files are no longer included in this directory.

lib/FSharp · high confidence

Removal of legacy monad implementations

The repository has removed the legacy implementations of the Continuation, Maybe, Reader, State, and Writer monads, along with their associated unit tests. This cleanup eliminates deprecated functional programming constructs from the FSharpx.Extras library, simplifying the codebase by removing these specific monad modules and their test suites.

src · high confidence

Behavioural changes

Modernize build system and project structure for FSharpx.Extras

The project has been modernized by migrating from the legacy FAKE-based build script (build.fsx) to a .NET SDK-based build using dotnet tooling, as evidenced by the new build.sh, build.cmd, and global.json files. The solution file has been updated to FSharpx.Extras.sln, reflecting the project's renaming from FSharp.Monad/FSharpx.Core to FSharpx.Extras. Additionally, the repository now includes a .gitattributes file to standardize line endings across different operating systems, and the .gitignore has been expanded to cover modern IDE and build artifacts.

(repo-wide) · high confidence

Removed FAKE tooling assets and documentation templates

The \tools/FAKE\ directory has been cleaned of legacy assets, including license files (\DocuLicense.txt\, \License.txt\), configuration files (\FAKE.exe.config\), XML documentation files (\FSharp.Core.xml\, \Fake.Git.XML\, \Fake.SQL.XML\, \FakeLib.XML\), and various Spark templates for documentation generation. This change removes the static resources and metadata files associated with the FAKE build tool within the \tools\ directory.

tools · high confidence

Test coverage

Added C\# unit tests for FSharpx functional types; Added comprehensive test coverage for core functional programming abstractions.

Dependencies

Migrate build and test projects to .NET 8/9/10 and modernize project structure

The build system and test suites have been updated to target .NET 8, 9, and 10. The legacy FSharp.Monad project has been removed and replaced with the modernized FSharpx.Extras library, which now uses SDK-style project files and targets .NET Standard 2.0. Additionally, the build configuration now uses Paket for dependency management, and test projects have been restructured to support multi-targeting across .NET 4.8, 8, 9, and 10.0.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 42 → 54 (+12.7)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 38 → 70 (+32.4)
  • Architecture 53 → 53 (-0.0)
  • Maturity 33 → 45 (+12.1)
  • Readiness 66 → 66 (-0.1)
  • Security 80 → 96 (+16.2)

Resolved (14)

  • BarePragmaDisable (tests/FSharpx.CSharpTests/AsyncTests.cs)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • LLM evaluation failed
  • Navigability not included (check did not complete)
  • No exposed public API
  • No usage example for any of the libraries/packages in the collection. (README.md)
  • NoWarnInCsproj (.paket/Paket.Restore.targets)
  • NoWarnInCsproj (.paket/Paket.Restore.targets)
  • NoWarnInCsproj (.paket/Paket.Restore.targets)
  • NoWarnInCsproj (.paket/Paket.Restore.targets)
  • complexity unreadable for .fs — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (44)

  • CommentedOutCode (tests/FSharpx.CSharpTests/ValidationTests.cs)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (src/FSharpx.Extras/ComputationExpressions/Choice.fs)
  • Duplicated block (10 lines × 2) (src/FSharpx.Text.StructuredFormat/StructuredFormat.fs)
  • Duplicated block (11 lines × 2) (src/FSharpx.Extras/ComputationExpressions/Reader.fs)
  • Duplicated block (11 lines × 2) (src/FSharpx.Extras/Pluralizer.fs)
  • Duplicated block (12–14 lines × 4) (src/FSharpx.Extras/ComputationExpressions/Async.fs)
  • Duplicated block (13–16 lines × 2) (src/FSharpx.Extras/ComputationExpressions/State.fs)
  • Duplicated block (19–21 lines × 2) (src/FSharpx.Extras/ComputationExpressions/Choice.fs)
  • Duplicated block (28 lines × 2) (src/FSharpx.Extras/ComputationExpressions/Validation.fs)
  • Duplicated block (5 lines × 2) (src/FSharpx.Extras/ComputationExpressions/Validation.fs)
  • Duplicated block (5 lines × 2) (src/FSharpx.Text.StructuredFormat/StructuredFormat.fs)
  • Duplicated block (5–6 lines × 5) (src/FSharpx.Extras/ComputationExpressions/Async.fs)
  • Duplicated block (7 lines × 2) (src/FSharpx.Extras/ComputationExpressions/Choice.fs)
  • Duplicated block (7–10 lines × 5) (src/FSharpx.Extras/ComputationExpressions/Continuation.fs)
  • Duplicated block (8 lines × 2) (src/FSharpx.Extras/Iteratee.fs)
  • Duplicated block (9 lines × 2) (src/FSharpx.Extras/ComputationExpressions/Validation.fs)
  • Duplicated block (9–13 lines × 6) (src/FSharpx.Extras/ComputationExpressions/Async.fs)
  • FileScopedPragmaDisable (tests/FSharpx.CSharpTests/AsyncTests.cs)
  • …and 24 more

Architecture

  • Containers 0 added · 0 removed · contexts 3 added · 0 removed · edges 1 added · 0 removed

Added bounded contexts (3)

  • FSharpx.Extras
  • FSharpx.Tests
  • FSharpx.Text.StructuredFormat

Added dependency edges (1)

  • FSharpx.Tests → FSharpx.Extras (coupling)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

fsprojects/FSharpx.Extras was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 4a0378a90a8f2a7b362958a7165fbf4b4828c385 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.