ExtCore is an extended core library for F#. ExtCore is designed to the same coding guidelines and quality standards as the F# core library (FSharp.Core), so the API is simple and intuitive to use.
ExtCore does not aim to be a "batteries-included" library; instead, ExtCore functionality is concentrated into a few key areas:
Pervasives
Top-level operators, functions, and modules providing common functionality. For example, the
notImpl
operator can be used to raise aSystem.NotImplementedException
instead of the less-specificfailwith
, and theOption
module provides additional functions for working with the'T option
type to complement those available in FSharp.Core'sOption
module.Collections
Immutable data structures. Some of these are drop-in (almost) replacements for the
Map
andSet
types in FSharp.Core which provide improved performance in specific scenarios (e.g.,HashMap
). Others provide unique functionality to help tackle specific coding tasks (e.g.,LazyList
andLruCache
).Control
Computation expressions (a.k.a. "workflows" or "monads") aimed at simplifying the implementation of common functional programming patterns. For example, ExtCore provides an
asyncMaybe
workflow which is similar toasync
in FSharp.Core but includes additional logic to handle cases where a computation encounters an error or fails to return a valid result.Control.Collections
Modules which mirror the built-in collections modules in FSharp.Core like
Array
orMap
, but whose functions are designed to work with the computation expressions included in ExtCore. For example, you might have some code that uses theArray.map
function; if your mapping function can sometimes fail, you can use theChoice.Array.map
function instead to gracefully handle the error instead of raising an exception.
Known bugs or other issues are listed on the ExtCore issues page.
ExtCore is licensed under the terms of the Apache 2.0 license.