1pub mod prelude {
8 pub use karpal_core::hkt::{
10 EnvF, HKT, HKT2, IdentityF, NonEmptyVec, NonEmptyVecF, OptionF, ResultBF, ResultF, StoreF,
11 TracedF, TupleF, VecF,
12 };
13
14 pub use karpal_core::{
16 Alt, Alternative, Applicative, Apply, Chain, Functor, FunctorFilter, Monad,
17 };
18
19 pub use karpal_core::{Foldable, Traversable};
21
22 pub use karpal_core::{Comonad, ComonadEnv, ComonadStore, ComonadTraced, Extend};
24
25 pub use karpal_core::{Bifunctor, NaturalTransformation, Selective};
27
28 pub use karpal_core::Invariant;
30
31 pub use karpal_core::{Conclude, Contravariant, Decide, Divide, Divisible, PredicateF};
33
34 pub use karpal_core::Plus;
36
37 pub use karpal_core::{Monoid, Semigroup};
39
40 pub use karpal_core::{First, Last, Max, Min, Product, Sum};
42
43 pub use karpal_algebra::{
45 AbelianGroup, BoundedLattice, Field, Group, Lattice, Module, Ring, Semiring, VectorSpace,
46 };
47
48 pub use karpal_profunctor::{Choice, FnP, ForgetF, Profunctor, Strong, TaggedF, Traversing};
50
51 pub use karpal_optics::fold::{ComposedFold, Fold};
53 pub use karpal_optics::getter::{ComposedGetter, Getter};
54 pub use karpal_optics::iso::{Iso, SimpleIso};
55 pub use karpal_optics::lens::{ComposedLens, Lens, SimpleLens};
56 pub use karpal_optics::optic::Optic;
57 pub use karpal_optics::review::Review;
58 pub use karpal_optics::setter::{Setter, SimpleSetter};
59 pub use karpal_optics::traversal::{ComposedTraversal, SimpleTraversal, Traversal};
60 pub use karpal_optics::{Prism, SimplePrism};
61
62 pub use karpal_arrow::{
64 Arrow, ArrowApply, ArrowChoice, ArrowLoop, ArrowPlus, ArrowZero, Category, CokleisliF, FnA,
65 KleisliF, Semigroupoid,
66 };
67
68 pub use karpal_arrow::{impl_cokleisli, impl_cokleisli_env};
70
71 pub use karpal_free::{
73 Codensity, CodensityF, Cofree, CofreeF, Coyoneda, CoyonedaF, Day, DayF, Density, DensityF,
74 Free, FreeAlt, FreeAltF, FreeAp, FreeApF, FreeF, Freer, FreerF, Lan, LanF, Ran, RanMapped,
75 Yoneda, YonedaF,
76 };
77
78 pub use karpal_recursion::{
80 Either, Fix, FixF, Mu, Nu, ana, apo, cata, chrono, futu, histo, hylo, para, zygo,
81 };
82
83 pub use karpal_core::{ado_, do_};
85}
86
87pub use karpal_algebra;
89pub use karpal_arrow;
90pub use karpal_core;
91pub use karpal_free;
92pub use karpal_optics;
93pub use karpal_profunctor;
94pub use karpal_recursion;
95
96pub use karpal_core::ado_;
98pub use karpal_core::do_;
99
100#[cfg(test)]
101mod tests {
102 use super::prelude::*;
103
104 #[test]
105 fn prelude_hkt_accessible() {
106 let _: <OptionF as HKT>::Of<i32> = Some(42);
107 let _: <VecF as HKT>::Of<i32> = vec![1, 2, 3];
108 let _: <ResultF<String> as HKT>::Of<i32> = Ok(42);
109 }
110
111 #[test]
112 fn prelude_functor_accessible() {
113 let result = <OptionF as Functor>::fmap(Some(1), |x| x + 1);
114 assert_eq!(result, Some(2));
115 }
116
117 #[test]
118 fn prelude_lens_accessible() {
119 let lens: SimpleLens<(i32, i32), i32> = Lens::new(|p: &(i32, i32)| p.0, |p, x| (x, p.1));
120 assert_eq!(lens.get(&(1, 2)), 1);
121 }
122
123 #[test]
124 fn prelude_prism_accessible() {
125 let prism: SimplePrism<Option<i32>, i32> = Prism::new(
126 |s| match s {
127 Some(v) => Ok(v),
128 None => Err(None),
129 },
130 Some,
131 );
132 assert_eq!(prism.preview(&Some(42)), Some(42));
133 assert_eq!(prism.preview(&None), None);
134 }
135
136 #[test]
137 fn prelude_profunctor_accessible() {
138 let f: <FnP as HKT2>::P<i32, i32> = Box::new(|x| x + 1);
139 assert_eq!(f(1), 2);
140 }
141
142 #[test]
143 fn prelude_arrow_accessible() {
144 let double = <FnA as Arrow>::arr(|x: i32| x * 2);
145 let inc = <FnA as Arrow>::arr(|x: i32| x + 1);
146 let composed = <FnA as Semigroupoid>::compose(inc, double);
147 assert_eq!(composed(5), 11); }
149}