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_profunctor::{Choice, FnP, Profunctor, Strong};
42
43 pub use karpal_optics::lens::ComposedLens;
45 pub use karpal_optics::lens::{Lens, SimpleLens};
46 pub use karpal_optics::optic::Optic;
47 pub use karpal_optics::{Prism, SimplePrism};
48
49 pub use karpal_arrow::{
51 Arrow, ArrowApply, ArrowChoice, ArrowLoop, ArrowPlus, ArrowZero, Category, CokleisliF, FnA,
52 KleisliF, Semigroupoid,
53 };
54
55 pub use karpal_arrow::{impl_cokleisli, impl_cokleisli_env};
57
58 pub use karpal_core::{ado_, do_};
60}
61
62pub use karpal_arrow;
64pub use karpal_core;
65pub use karpal_optics;
66pub use karpal_profunctor;
67
68pub use karpal_core::ado_;
70pub use karpal_core::do_;
71
72#[cfg(test)]
73mod tests {
74 use super::prelude::*;
75
76 #[test]
77 fn prelude_hkt_accessible() {
78 let _: <OptionF as HKT>::Of<i32> = Some(42);
79 let _: <VecF as HKT>::Of<i32> = vec![1, 2, 3];
80 let _: <ResultF<String> as HKT>::Of<i32> = Ok(42);
81 }
82
83 #[test]
84 fn prelude_functor_accessible() {
85 let result = <OptionF as Functor>::fmap(Some(1), |x| x + 1);
86 assert_eq!(result, Some(2));
87 }
88
89 #[test]
90 fn prelude_lens_accessible() {
91 let lens: SimpleLens<(i32, i32), i32> = Lens::new(|p: &(i32, i32)| p.0, |p, x| (x, p.1));
92 assert_eq!(lens.get(&(1, 2)), 1);
93 }
94
95 #[test]
96 fn prelude_prism_accessible() {
97 let prism: SimplePrism<Option<i32>, i32> = Prism::new(
98 |s| match s {
99 Some(v) => Ok(v),
100 None => Err(None),
101 },
102 Some,
103 );
104 assert_eq!(prism.preview(&Some(42)), Some(42));
105 assert_eq!(prism.preview(&None), None);
106 }
107
108 #[test]
109 fn prelude_profunctor_accessible() {
110 let f: <FnP as HKT2>::P<i32, i32> = Box::new(|x| x + 1);
111 assert_eq!(f(1), 2);
112 }
113
114 #[test]
115 fn prelude_arrow_accessible() {
116 let double = <FnA as Arrow>::arr(|x: i32| x * 2);
117 let inc = <FnA as Arrow>::arr(|x: i32| x + 1);
118 let composed = <FnA as Semigroupoid>::compose(inc, double);
119 assert_eq!(composed(5), 11); }
121}