33 * Copyright (c) "2025" . The DeepCausality Authors and Contributors. All Rights Reserved.
44 */
55
6- use crate :: { Effect3 , Effect4 , Effect5 , Functor , Monad , MonadEffect3 , MonadEffect4 , MonadEffect5 } ;
6+ use crate :: {
7+ Applicative , Effect3 , Effect4 , Effect5 , Functor , Monad , MonadEffect3 , MonadEffect4 ,
8+ MonadEffect5 ,
9+ } ;
710use crate :: { HKT , HKT3 , HKT4 , HKT5 , Placeholder } ;
811
912// --- MonadEffect3 Setup ---
@@ -49,7 +52,7 @@ impl Functor<MyEffectHktWitness<String, String>> for MyEffectHktWitness<String,
4952 }
5053}
5154
52- impl Monad < MyEffectHktWitness < String , String > > for MyEffectHktWitness < String , String > {
55+ impl Applicative < MyEffectHktWitness < String , String > > for MyEffectHktWitness < String , String > {
5356 fn pure < T > ( value : T ) -> MyCustomEffectType < T , String , String > {
5457 MyCustomEffectType {
5558 value,
@@ -58,6 +61,40 @@ impl Monad<MyEffectHktWitness<String, String>> for MyEffectHktWitness<String, St
5861 }
5962 }
6063
64+ fn apply < A , B , Func > (
65+ mut f_ab : MyCustomEffectType < Func , String , String > ,
66+ f_a : MyCustomEffectType < A , String , String > ,
67+ ) -> MyCustomEffectType < B , String , String >
68+ where
69+ Func : FnMut ( A ) -> B ,
70+ {
71+ if f_ab. error . is_some ( ) {
72+ return MyCustomEffectType {
73+ value : ( f_ab. value ) ( f_a. value ) , // Dummy call to satisfy type, actual value discarded
74+ error : f_ab. error ,
75+ warnings : f_ab. warnings ,
76+ } ;
77+ }
78+ if f_a. error . is_some ( ) {
79+ return MyCustomEffectType {
80+ value : ( f_ab. value ) ( f_a. value ) , // Dummy call to satisfy type, actual value discarded
81+ error : f_a. error ,
82+ warnings : f_a. warnings ,
83+ } ;
84+ }
85+
86+ let mut combined_warnings = f_ab. warnings ;
87+ combined_warnings. extend ( f_a. warnings ) ;
88+
89+ MyCustomEffectType {
90+ value : ( f_ab. value ) ( f_a. value ) ,
91+ error : None ,
92+ warnings : combined_warnings,
93+ }
94+ }
95+ }
96+
97+ impl Monad < MyEffectHktWitness < String , String > > for MyEffectHktWitness < String , String > {
6198 fn bind < A , B , Func > (
6299 m_a : MyCustomEffectType < A , String , String > ,
63100 f : Func ,
@@ -188,7 +225,9 @@ impl Functor<MyEffectHktWitness4<String, String, u64>>
188225 }
189226}
190227
191- impl Monad < MyEffectHktWitness4 < String , String , u64 > > for MyEffectHktWitness4 < String , String , u64 > {
228+ impl Applicative < MyEffectHktWitness4 < String , String , u64 > >
229+ for MyEffectHktWitness4 < String , String , u64 >
230+ {
192231 fn pure < T > ( value : T ) -> MyCustomEffectType4 < T , String , String , u64 > {
193232 MyCustomEffectType4 {
194233 value,
@@ -198,6 +237,46 @@ impl Monad<MyEffectHktWitness4<String, String, u64>> for MyEffectHktWitness4<Str
198237 }
199238 }
200239
240+ fn apply < A , B , Func > (
241+ mut f_ab : MyCustomEffectType4 < Func , String , String , u64 > ,
242+ f_a : MyCustomEffectType4 < A , String , String , u64 > ,
243+ ) -> MyCustomEffectType4 < B , String , String , u64 >
244+ where
245+ Func : FnMut ( A ) -> B ,
246+ {
247+ if f_ab. f1 . is_some ( ) {
248+ return MyCustomEffectType4 {
249+ value : ( f_ab. value ) ( f_a. value ) , // Dummy call to satisfy type
250+ f1 : f_ab. f1 ,
251+ f2 : f_ab. f2 ,
252+ f3 : f_ab. f3 ,
253+ } ;
254+ }
255+ if f_a. f1 . is_some ( ) {
256+ return MyCustomEffectType4 {
257+ value : ( f_ab. value ) ( f_a. value ) , // Dummy call to satisfy type
258+ f1 : f_a. f1 ,
259+ f2 : f_a. f2 ,
260+ f3 : f_a. f3 ,
261+ } ;
262+ }
263+
264+ let mut combined_f2 = f_ab. f2 ;
265+ combined_f2. extend ( f_a. f2 ) ;
266+
267+ let mut combined_f3 = f_ab. f3 ;
268+ combined_f3. extend ( f_a. f3 ) ;
269+
270+ MyCustomEffectType4 {
271+ value : ( f_ab. value ) ( f_a. value ) ,
272+ f1 : None ,
273+ f2 : combined_f2,
274+ f3 : combined_f3,
275+ }
276+ }
277+ }
278+
279+ impl Monad < MyEffectHktWitness4 < String , String , u64 > > for MyEffectHktWitness4 < String , String , u64 > {
201280 fn bind < A , B , Func > (
202281 m_a : MyCustomEffectType4 < A , String , String , u64 > ,
203282 f : Func ,
@@ -343,7 +422,7 @@ impl Functor<MyEffectHktWitness5<String, String, u64, String>>
343422 }
344423}
345424
346- impl Monad < MyEffectHktWitness5 < String , String , u64 , String > >
425+ impl Applicative < MyEffectHktWitness5 < String , String , u64 , String > >
347426 for MyEffectHktWitness5 < String , String , u64 , String >
348427{
349428 fn pure < T > ( value : T ) -> MyCustomEffectType5 < T , String , String , u64 , String > {
@@ -356,6 +435,54 @@ impl Monad<MyEffectHktWitness5<String, String, u64, String>>
356435 }
357436 }
358437
438+ fn apply < A , B , Func > (
439+ mut f_ab : MyCustomEffectType5 < Func , String , String , u64 , String > ,
440+ f_a : MyCustomEffectType5 < A , String , String , u64 , String > ,
441+ ) -> MyCustomEffectType5 < B , String , String , u64 , String >
442+ where
443+ Func : FnMut ( A ) -> B ,
444+ {
445+ if f_ab. f1 . is_some ( ) {
446+ return MyCustomEffectType5 {
447+ value : ( f_ab. value ) ( f_a. value ) , // Dummy call to satisfy type
448+ f1 : f_ab. f1 ,
449+ f2 : f_ab. f2 ,
450+ f3 : f_ab. f3 ,
451+ f4 : f_ab. f4 ,
452+ } ;
453+ }
454+ if f_a. f1 . is_some ( ) {
455+ return MyCustomEffectType5 {
456+ value : ( f_ab. value ) ( f_a. value ) , // Dummy call to satisfy type
457+ f1 : f_a. f1 ,
458+ f2 : f_a. f2 ,
459+ f3 : f_a. f3 ,
460+ f4 : f_a. f4 ,
461+ } ;
462+ }
463+
464+ let mut combined_f2 = f_ab. f2 ;
465+ combined_f2. extend ( f_a. f2 ) ;
466+
467+ let mut combined_f3 = f_ab. f3 ;
468+ combined_f3. extend ( f_a. f3 ) ;
469+
470+ let mut combined_f4 = f_ab. f4 ;
471+ combined_f4. extend ( f_a. f4 ) ;
472+
473+ MyCustomEffectType5 {
474+ value : ( f_ab. value ) ( f_a. value ) ,
475+ f1 : None ,
476+ f2 : combined_f2,
477+ f3 : combined_f3,
478+ f4 : combined_f4,
479+ }
480+ }
481+ }
482+
483+ impl Monad < MyEffectHktWitness5 < String , String , u64 , String > >
484+ for MyEffectHktWitness5 < String , String , u64 , String >
485+ {
359486 fn bind < A , B , Func > (
360487 m_a : MyCustomEffectType5 < A , String , String , u64 , String > ,
361488 f : Func ,
0 commit comments