use lubeck::prelude::*;
fn main() {
let mk_tup_app = |first: usize| move |second: usize| (first, second);
let xs = vec![3, 4, 5, 6];
let fs = [11, 21, 31, 41].map(mk_tup_app).to_vec();
let applicative_tuples = xs.app(fs);
println!("tuples through applicative: {applicative_tuples:?}");
let mk_tup_mon = |first: usize| vec![(first, 3), (first, 4), (first, 5), (first, 6)];
let xs = vec![11, 21, 31, 41];
let monad_tuples = xs.bind(mk_tup_mon);
println!("tuples through monad: {monad_tuples:?}");
}