fsprojects/FSharpx.Extras
54.4
Adequate · 23 September 2026
5.5k
lines of production code
F#
primary language
5
measurements over time
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.