最近简要介绍了Haskell,对于monad本质上是什么,简单,简洁,实用的解释是什么?
我发现我遇到的大多数解释都是相当难以接近的,缺乏实际细节.
我正在尝试写一个特性,这将允许我"解包"多个嵌套Option<Option<...<T>>>>到单个,Option<T>以更好地使用我正在使用的API.我正在尝试创建一个通用解决方案,但我无法弄清楚如何使其工作.
这是我的许多尝试之一:
trait UnwrapOption<T> {
fn unwrap_opt(self) -> Option<T>;
}
impl<T> UnwrapOption<T> for Option<T> {
fn unwrap_opt(self) -> Option<T> {
self
}
}
impl<T> UnwrapOption<T> for Option<Option<T>> {
fn unwrap_opt(self) -> Option<T> {
match self {
Some(e) => e.unwrap_opt(),
None => None,
}
}
}
fn main() {
let x = Some(Some(Some(1)));
println!("{:?}", x.unwrap_opt());
}
Run Code Online (Sandbox Code Playgroud)