lun*_*ain 14 haskell scala sequence
什么是sequence
Scala中的Haskell ?我想将选项列表转换为列表选项.它应该像None
任何选项一样出现None
.
List(Some(1), None, Some(2)).??? --> None
List(Some(1), Some(2), Some(3)).??? --> Some(List(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
mpi*_*ist 24
Scalaz定义了序列.
这是一个例子:
scala> import scalaz._
import scalaz._
scala> import Scalaz._
import Scalaz._
scala> List(Some(1), None, Some(2)).sequence
res0: Option[List[Int]] = None
scala> List(some(1), some(2), some(3)).sequence
res1: Option[List[Int]] = Some(List(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
请注意,在第二个示例中,您必须使用Scalaz的某个函数来创建Some - 否则,List将构造为List [Some [Int]],这会导致此错误:
scala> List(Some(1), Some(2), Some(3)).sequence
<console>:14: error: could not find implicit value for parameter n: scalaz.Applicative[N]
List(Some(1), Some(2), Some(3)).sequence
Run Code Online (Sandbox Code Playgroud)
Scalaz some(a)和none函数创建Option [A]类型的Some和None值.
Mil*_*bin 16
如果你想要一个只有List和Option的解决方案,而不是一般的monad那么下面就可以完成这个工作,
def sequence[T](l : List[Option[T]]) =
if (l.contains(None)) None else Some(l.flatten)
Run Code Online (Sandbox Code Playgroud)
REPL会议,
scala> sequence(List(Some(1), None, Some(2)))
res2: Option[List[Int]] = None
scala> sequence(List(Some(1), Some(2), Some(3)))
res3: Option[List[Int]] = Some(List(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
只需使用Scalaz ......
归档时间: |
|
查看次数: |
4005 次 |
最近记录: |