#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(feature = "alloc")]
extern crate alloc;
mod alias;
pub(crate) mod effect_system;
pub(crate) mod extensions;
pub(crate) mod hkt;
pub(crate) mod traits;
pub mod utils_tests;
pub use alias::alias_adjunction::AliasAdjunction;
pub use alias::alias_comonad::AliasCoMonad;
pub use alias::alias_foldable::AliasFoldable;
pub use alias::alias_functor::AliasFunctor;
pub use alias::alias_monad::AliasMonad;
pub use alias::alias_profunctor::AliasProfunctor;
pub use crate::hkt::{HKT, HKT2, HKT3, HKT4, HKT5, Satisfies};
pub use crate::hkt::{HKT2Unbound, HKT3Unbound, HKT4Unbound, HKT5Unbound, HKT6Unbound};
pub use crate::hkt::{NoConstraint, Placeholder};
pub use crate::traits::adjunction::Adjunction;
pub use crate::traits::applicative::Applicative;
pub use crate::traits::bifunctor::Bifunctor;
pub use crate::traits::comonad::CoMonad;
pub use crate::traits::cybernetic_loop::CyberneticLoop;
pub use crate::traits::foldable::Foldable;
pub use crate::traits::functor::Functor;
pub use crate::traits::monad::Monad;
pub use crate::traits::parametric_monad::ParametricMonad;
pub use crate::traits::profunctor::Profunctor;
pub use crate::traits::promonad::Promonad;
pub use crate::traits::pure::Pure;
pub use crate::traits::riemann_map::RiemannMap;
pub use crate::traits::traversable::Traversable;
pub use crate::effect_system::effect::{Effect3, Effect4, Effect5};
pub use crate::effect_system::effect_log::{LogAddEntry, LogAppend, LogEffect, LogSize};
pub use crate::effect_system::effect_unbound::{Effect3Unbound, Effect4Unbound, Effect5Unbound};
pub use crate::effect_system::monad_effect::{MonadEffect3, MonadEffect4, MonadEffect5};
pub use crate::effect_system::monad_effect_unbound::{
MonadEffect3Unbound, MonadEffect4Unbound, MonadEffect5Unbound,
};
#[cfg(feature = "alloc")]
pub use crate::extensions::func_fold_b_tree_map_ext::BTreeMapWitness;
#[cfg(feature = "std")]
pub use crate::extensions::func_fold_hash_map_ext::HashMapWitness;
#[cfg(feature = "alloc")]
pub use crate::extensions::func_fold_vec_deque_ext::VecDequeWitness;
#[cfg(feature = "alloc")]
pub use crate::extensions::hkt_box_ext::BoxWitness;
#[cfg(feature = "alloc")]
pub use crate::extensions::hkt_linked_list_ext::LinkedListWitness;
pub use crate::extensions::hkt_option_ext::OptionWitness;
pub use crate::extensions::hkt_result_ext::{ResultUnboundWitness, ResultWitness};
pub use crate::extensions::hkt_tuple_ext::{Tuple2Witness, Tuple3Witness};
#[cfg(feature = "alloc")]
pub use crate::extensions::hkt_vec_ext::VecWitness;