1pub mod prelude {
8 pub use karpal_core::hkt::{
10 EnvF, HKT, HKT2, IdentityF, NonEmptyVec, NonEmptyVecF, OptionF, ReaderF, ResultBF, ResultF,
11 StoreF, 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, DinaturalTransformation, 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_core::{
45 Adjunction, Coend, ComposeF, ContAdj, ContF, ContravariantAdjunction, CurryAdj, End,
46 IdentityAdj, ProfunctorAdjunction, ProfunctorFunctor, ProfunctorIdentityAdj,
47 ProfunctorIdentityF,
48 };
49
50 pub use karpal_algebra::{
52 AbelianGroup, BoundedLattice, Field, Group, Lattice, Module, Ring, Semiring, VectorSpace,
53 };
54
55 pub use karpal_profunctor::{Choice, FnP, ForgetF, Profunctor, Strong, TaggedF, Traversing};
57
58 pub use karpal_optics::fold::{ComposedFold, Fold};
60 pub use karpal_optics::getter::{ComposedGetter, Getter};
61 pub use karpal_optics::iso::{Iso, SimpleIso};
62 pub use karpal_optics::lens::{ComposedLens, Lens, SimpleLens};
63 pub use karpal_optics::optic::Optic;
64 pub use karpal_optics::review::Review;
65 pub use karpal_optics::setter::{Setter, SimpleSetter};
66 pub use karpal_optics::traversal::{ComposedTraversal, SimpleTraversal, Traversal};
67 pub use karpal_optics::{Prism, SimplePrism};
68
69 pub use karpal_arrow::{
71 Arrow, ArrowApply, ArrowChoice, ArrowLoop, ArrowPlus, ArrowZero, Category, CokleisliF, FnA,
72 KleisliF, Semigroupoid,
73 };
74
75 pub use karpal_arrow::{impl_cokleisli, impl_cokleisli_env};
77
78 pub use karpal_free::{
80 Codensity, CodensityF, Cofree, CofreeF, Coyoneda, CoyonedaF, Day, DayF, Density, DensityF,
81 Free, FreeAlt, FreeAltF, FreeAp, FreeApF, FreeF, Freer, FreerF, Lan, LanF, Ran, RanMapped,
82 Yoneda, YonedaF,
83 };
84
85 pub use karpal_recursion::{
87 Either, Fix, FixF, Mu, Nu, ana, apo, cata, chrono, futu, histo, hylo, para, zygo,
88 };
89
90 pub use karpal_effect::{
92 ApplicativeSt, ChainSt, ExceptTF, FunctorSt, MonadTrans, ReaderTF, StateTF, WriterTF,
93 };
94
95 pub use karpal_core::{ado_, do_};
97}
98
99pub use karpal_algebra;
101pub use karpal_arrow;
102pub use karpal_core;
103pub use karpal_effect;
104pub use karpal_free;
105pub use karpal_optics;
106pub use karpal_profunctor;
107pub use karpal_recursion;
108
109pub use karpal_core::ado_;
111pub use karpal_core::do_;
112
113#[cfg(test)]
114mod tests {
115 use super::prelude::*;
116
117 #[test]
118 fn prelude_hkt_accessible() {
119 let _: <OptionF as HKT>::Of<i32> = Some(42);
120 let _: <VecF as HKT>::Of<i32> = vec![1, 2, 3];
121 let _: <ResultF<String> as HKT>::Of<i32> = Ok(42);
122 }
123
124 #[test]
125 fn prelude_functor_accessible() {
126 let result = <OptionF as Functor>::fmap(Some(1), |x| x + 1);
127 assert_eq!(result, Some(2));
128 }
129
130 #[test]
131 fn prelude_lens_accessible() {
132 let lens: SimpleLens<(i32, i32), i32> = Lens::new(|p: &(i32, i32)| p.0, |p, x| (x, p.1));
133 assert_eq!(lens.get(&(1, 2)), 1);
134 }
135
136 #[test]
137 fn prelude_prism_accessible() {
138 let prism: SimplePrism<Option<i32>, i32> = Prism::new(
139 |s| match s {
140 Some(v) => Ok(v),
141 None => Err(None),
142 },
143 Some,
144 );
145 assert_eq!(prism.preview(&Some(42)), Some(42));
146 assert_eq!(prism.preview(&None), None);
147 }
148
149 #[test]
150 fn prelude_profunctor_accessible() {
151 let f: <FnP as HKT2>::P<i32, i32> = Box::new(|x| x + 1);
152 assert_eq!(f(1), 2);
153 }
154
155 #[test]
156 fn prelude_arrow_accessible() {
157 let double = <FnA as Arrow>::arr(|x: i32| x * 2);
158 let inc = <FnA as Arrow>::arr(|x: i32| x + 1);
159 let composed = <FnA as Semigroupoid>::compose(inc, double);
160 assert_eq!(composed(5), 11); }
162}