我真的很难理解这行代码。有人可以详细解释一下吗?
def sequence[A](aos: List[Option[A]]): Option[List[A]] =
aos.foldRight[Option[List[A]]](Some(Nil))((a,acc) => map2(a,acc)(_ :: _))
答案 0 :(得分:3)
很难用一小段代码来解释,但我会尝试一下。
说明:该功能正在尝试在sequence
上实施List[Option[A]]
操作。此操作在FP中非常常见(我建议您查看cats中的常规实现。通常,它会将F[G[A]]
类型转换为G[F[A]]
,在您的示例中,它会专门转换{{1}转到List[Option[A]]
。
更新:您必须指定Option[List[A]]
以确保编译器推断出正确的类型。由于ADT在Scala中的实现方式,如果您没有指定返回类型,编译器会将Option[List[A]]
推断为返回类型。