Skip to main content

Module std_coverage_checklist

Module std_coverage_checklist 

Source
Expand description

§Checklist: fp-library vs Rust’s std library

This document tracks the coverage of fp-library against functionality provided by Rust’s std library, mapping functional programming concepts to their standard library equivalents. It serves as a checklist for implemented features and a roadmap for future additions.

§Type Classes (Traits)

FP ConceptRust std Equivalent / Use CaseImplementation Path
AltOption::or, Result::orclasses/alt.rs
AlternativeOption::or, Option::xorclasses/alternative.rs
ApplicativeN/Aclasses/applicative.rs
ApplyFirstN/Aclasses/apply_first.rs
ApplySecondN/Aclasses/apply_second.rs
BifoldableN/Aclasses/bifoldable.rs
BifunctorResult::map_err, Tuple operationsclasses/bifunctor.rs
BitraversableN/Aclasses/bitraversable.rs
CategoryN/Aclasses/category.rs
ChoiceN/Aclasses/profunctor/choice.rs
CloneFnClone + Fnclasses/clone_fn.rs
ClosureModeN/Aclasses/dispatch.rs
ClosedN/Aclasses/profunctor/closed.rs
CochoiceN/Aclasses/profunctor/cochoice.rs
CommutativeRingN/Aclasses/commutative_ring.rs
Comonad& (references), Box (context access)classes/comonad.rs
CompactableIterator::flatten (for Option)classes/compactable.rs
Contravariantcmp::Ordering, Comparison functionsclasses/contravariant.rs
CostrongN/Aclasses/profunctor/costrong.rs
DeferrableLazy evaluationclasses/deferrable.rs
DivisionRingN/Aclasses/division_ring.rs
EuclideanRingN/Aclasses/euclidean_ring.rs
ExtendN/Aclasses/extend.rs
ExtractN/Aclasses/extract.rs
FieldN/Aclasses/field.rs
FilterableIterator::filter, Vec::retainclasses/filterable.rs
FilterableWithIndexIterator::enumerate + filterclasses/filterable_with_index.rs
FoldableIterator::foldclasses/foldable.rs
FoldableWithIndexIterator::enumerate + foldclasses/foldable_with_index.rs
ArrowFn (composable)classes/arrow.rs
FunctorIterator::map, Option::mapclasses/functor.rs
FunctorWithIndexIterator::enumerate + mapclasses/functor_with_index.rs
HeytingAlgebrabool operationsclasses/heyting_algebra.rs
LazyConfigLazyCell, LazyLockclasses/lazy_config.rs
LiftN/Aclasses/lift.rs
LiftFnConstruction for CloneFn<Val>classes/clone_fn.rs
MonadOption::and_then, Result::and_thenclasses/monad.rs
MonadPlusN/Aclasses/monad_plus.rs
MonadRecN/Aclasses/monad_rec.rs
MonoidDefault + Addclasses/monoid.rs
NaturalTransformationN/Aclasses/natural_transformation.rs
ParCompactablerayon parallel compactclasses/par_compactable.rs
ParFilterablerayon parallel filterclasses/par_filterable.rs
ParFilterableWithIndexrayon parallel indexed filterclasses/par_filterable_with_index.rs
ParFoldablerayon parallel foldclasses/par_foldable.rs
ParFoldableWithIndexrayon parallel indexed foldclasses/par_foldable_with_index.rs
ParFunctorrayon parallel mapclasses/par_functor.rs
ParFunctorWithIndexrayon parallel indexed mapclasses/par_functor_with_index.rs
ParRefFilterablerayon parallel by-ref filterclasses/par_ref_filterable.rs
ParRefFilterableWithIndexrayon parallel by-ref indexed filterclasses/par_ref_filterable_with_index.rs
ParRefFoldablerayon parallel by-ref foldclasses/par_ref_foldable.rs
ParRefFoldableWithIndexrayon parallel by-ref indexed foldclasses/par_ref_foldable_with_index.rs
ParRefFunctorrayon parallel by-ref mapclasses/par_ref_functor.rs
ParRefFunctorWithIndexrayon parallel by-ref indexed mapclasses/par_ref_functor_with_index.rs
PipeMethod chainingclasses/pipe.rs
PlusDefault (empty for Alt)classes/plus.rs
PointedN/Aclasses/pointed.rs
PointerBox, Rc, Arcclasses/pointer.rs
ProfunctorFn(A) -> Bclasses/profunctor.rs
RefApplicativeN/A (blanket)classes/ref_applicative.rs
RefApplyFirstN/A (blanket)classes/ref_apply_first.rs
RefApplySecondN/A (blanket)classes/ref_apply_second.rs
RefCountedPointerRc, Arcclasses/ref_counted_pointer.rs
RefFilterableIterator::filter (by ref)classes/ref_filterable.rs
RefFilterableWithIndexN/Aclasses/ref_filterable_with_index.rs
RefFoldableIterator::fold (by ref)classes/ref_foldable.rs
RefFoldableWithIndexN/Aclasses/ref_foldable_with_index.rs
RefFunctorN/Aclasses/ref_functor.rs
RefFunctorWithIndexN/Aclasses/ref_functor_with_index.rs
RefLiftN/Aclasses/ref_lift.rs
RefMonadN/A (blanket)classes/ref_monad.rs
RefPointedN/Aclasses/ref_pointed.rs
RefSemiapplicativeN/Aclasses/ref_semiapplicative.rs
RefSemimonadN/Aclasses/ref_semimonad.rs
RefTraversableN/Aclasses/ref_traversable.rs
RefTraversableWithIndexN/Aclasses/ref_traversable_with_index.rs
RefWitherableN/Aclasses/ref_witherable.rs
RingN/Aclasses/ring.rs
SemiapplicativeN/Aclasses/semiapplicative.rs
SemigroupAddclasses/semigroup.rs
SemigroupoidN/Aclasses/semigroupoid.rs
SemimonadN/Aclasses/semimonad.rs
SemiringN/Aclasses/semiring.rs
SendCloneFnClone + Fn + Send + Syncclasses/send_clone_fn.rs
SendDeferrableLazy evaluation (thread-safe)classes/send_deferrable.rs
SendLiftFnConstruction for SendCloneFn<Val>classes/send_clone_fn.rs
SendRefApplicativeN/A (blanket)classes/send_ref_applicative.rs
SendRefApplyFirstN/A (blanket)classes/send_ref_apply_first.rs
SendRefApplySecondN/A (blanket)classes/send_ref_apply_second.rs
SendRefCountedPointerArcclasses/send_ref_counted_pointer.rs
SendRefFoldableN/Aclasses/send_ref_foldable.rs
SendRefFoldableWithIndexN/Aclasses/send_ref_foldable_with_index.rs
SendRefFunctorN/Aclasses/send_ref_functor.rs
SendRefFunctorWithIndexN/Aclasses/send_ref_functor_with_index.rs
SendRefLiftN/Aclasses/send_ref_lift.rs
SendRefMonadN/A (blanket)classes/send_ref_monad.rs
SendRefPointedN/Aclasses/send_ref_pointed.rs
SendRefSemiapplicativeN/Aclasses/send_ref_semiapplicative.rs
SendRefSemimonadN/Aclasses/send_ref_semimonad.rs
SendUnsizedCoercibleN/Aclasses/send_unsized_coercible.rs
StrongN/Aclasses/profunctor/strong.rs
TraversableIterator::collectclasses/traversable.rs
TraversableWithIndexN/Aclasses/traversable_with_index.rs
UnsizedCoercibleN/Aclasses/unsized_coercible.rs
WanderN/Aclasses/profunctor/wander.rs
WitherableN/Aclasses/witherable.rs
WithIndexN/Aclasses/with_index.rs

§Not yet implemented

FP ConceptRust std Equivalent / Use CaseNotes
DistributiveFn(A) -> BDual of Traversable.
InvariantCell, UnsafeCellFunctors that map in both directions.
MonadError? operator, Try trait (unstable)Abstracts over computation that can fail.
Showstd::fmt::Display, std::fmt::DebugConfigurable string representation in FP contexts.

§Data Types (Structs/Brands)

FP Data TypeRust std EquivalentImplementation Path
ArcBrandstd::sync::Arctypes/arc_ptr.rs
ArcCoyonedaBrand<F>N/Atypes/arc_coyoneda.rs
ArcFnBrandArc<dyn Fn>types/fn_brand.rs
ArcLazyArc<LazyLock>types/lazy.rs
ArcTryLazyArc<LazyLock<Result>>types/try_lazy.rs
CatListN/Atypes/cat_list.rs
ConstN/Atypes/const_val.rs
ControlFlowstd::ops::ControlFlowtypes/control_flow.rs
CoyonedaN/Atypes/coyoneda.rs
CoyonedaExplicitN/Atypes/coyoneda_explicit.rs
EndofunctionFn(A) -> Atypes/endofunction.rs
EndomorphismN/Atypes/endomorphism.rs
FnBrand<P>Rc<dyn Fn> / Arc<dyn Fn>types/fn_brand.rs
FreeN/Atypes/free.rs
Identityconvert::identitytypes/identity.rs
OptionOptiontypes/option.rs
Pair(A, B)types/pair.rs
RcBrandstd::rc::Rctypes/rc_ptr.rs
RcCoyonedaBrand<F>N/Atypes/rc_coyoneda.rs
RcFnBrandRc<dyn Fn>types/fn_brand.rs
RcLazyRc<LazyCell>types/lazy.rs
RcTryLazyRc<LazyCell<Result>>types/try_lazy.rs
ResultResulttypes/result.rs
SendEndofunctionArc<dyn Fn(A) -> A>types/send_endofunction.rs
SendThunkN/Atypes/send_thunk.rs
StringStringtypes/string.rs
ThunkN/Atypes/thunk.rs
TrampolineN/Atypes/trampoline.rs
TrySendThunkN/Atypes/try_send_thunk.rs
TryThunkN/Atypes/try_thunk.rs
TryTrampolineN/Atypes/try_trampoline.rs
Tuple1(A,)types/tuple_1.rs
Tuple2(A, B)types/tuple_2.rs
VecVectypes/vec.rs

§Not yet implemented

FP Data TypeRust std EquivalentNotes
BinaryHeapBrandstd::collections::BinaryHeapPriority queue.
BoxBrandstd::boxed::BoxFundamental smart pointer.
BTreeMapBrandstd::collections::BTreeMapSorted key-value store.
BTreeSetBrandstd::collections::BTreeSetSorted set.
HashMapBrandstd::collections::HashMapKey-value store.
HashSetBrandstd::collections::HashSetSet of unique values.
IOmain, std::fs, std::netEncapsulates side effects.
LinkedListBrandstd::collections::LinkedListDoubly-linked list.
ReaderFunction arguments, std::envEncapsulates dependency injection.
Statelet mut, RefCellEncapsulates stateful computations.
ValidationResult (but accumulating)Similar to Result, but collects all errors.
VecDequeBrandstd::collections::VecDequeDouble-ended queue.
Writerstd::io::Write, LoggingEncapsulates logging or accumulating side outputs.

§Helper Wrappers (Newtypes)

Wrapper TypeRust std EquivalentImplementation Path
Additivestd::iter::Sum (trait)types/additive.rs
Conjunctivebool ANDtypes/conjunctive.rs
Disjunctivebool ORtypes/disjunctive.rs
Dualstd::cmp::Reversetypes/dual.rs
EndofunctionFn(A) -> Atypes/endofunction.rs
EndomorphismN/Atypes/endomorphism.rs
FirstOption::ortypes/first.rs
LastOption (overwrite)types/last.rs
Multiplicativestd::iter::Product (trait)types/multiplicative.rs

§Not yet implemented

Wrapper TypeRust std EquivalentNotes
Maxstd::cmp::maxSemigroup that takes the maximum value.
Minstd::cmp::minSemigroup that takes the minimum value.

§Free Functions

FunctionRust std EquivalentImplementation Path
composeN/Afunctions.rs
constantN/Afunctions.rs
flipN/Afunctions.rs
identitystd::convert::identityfunctions.rs
onN/Afunctions.rs
pipeMethod chainingclasses/pipe.rs

All type class free functions (map, bind, pure, fold_map, traverse, etc.) are defined in their respective trait modules under classes/ and re-exported via functions.rs.

§Summary of Priorities

  1. Collections: Adding brands for HashMap, HashSet, BTreeMap, and Box would immediately widen the library’s utility for standard Rust applications.
  2. Error Handling: Validation (accumulating Result) is high-value for robust error handling and would enable the ParTraversable error-accumulation flavour.
  3. Extensible Effects: State, Reader, and Writer are planned as effects within an extensible effects system rather than standalone monads. See effects plan.