use deep_causality_haft::{Functor, OptionWitness};
fn main() {
println!("=== DeepCausality HKT: Applicative Pattern ===\n");
println!("--- Independent Validation ---");
let validate_id = |id: &str| -> Option<String> {
if id.len() > 3 {
Some(id.to_string())
} else {
None
}
};
let validate_qty = |qty: u32| -> Option<u32> { if qty > 0 { Some(qty) } else { None } };
let valid_id = validate_id("item_123");
let _valid_qty = validate_qty(5);
let price = 10.0;
let constructor = |id: String| {
move |qty: u32| OrderItem {
id,
price,
quantity: qty,
}
};
let _partial_constructor = OptionWitness::fmap(valid_id, constructor);
let config_host = Some("localhost".to_string());
let config_port = 8080;
let combine = |host: String| move |port: i32| format!("{}:{}", host, port);
let partial = OptionWitness::fmap(config_host, combine);
if let Some(f) = partial {
let result = f(config_port); println!("Applicative Result: {}", result);
}
}
#[derive(Debug, Clone, PartialEq)]
struct OrderItem {
id: String,
price: f64,
quantity: u32,
}