Scala提供了List#flatten一种从哪里List[Option[A]]开始List[A].
scala> val list = List(Some(10), None)
list: List[Option[Int]] = List(Some(10), None)
scala> list.flatten
res11: List[Int] = List(10)
Run Code Online (Sandbox Code Playgroud)
我试图在Haskell中实现它:
flatten :: [Maybe a] -> [a]
flatten xs = map g $ xs >>= f
f :: Maybe a -> [Maybe a]
f x = case x of Just _ -> [x]
Nothing -> []
-- partial function!
g :: Maybe a -> a
g (Just x) = x
Run Code Online (Sandbox Code Playgroud)
但是,我不喜欢这g是一个部分的,即非全部的功能.
是否有完整的方法来编写这样的flatten功能?
Eri*_*ikR 10
你flatten的catMaybes (链接)是这样定义的:
catMaybes :: [Maybe a] -> [a]
catMaybes ls = [x | Just x <- ls]
Run Code Online (Sandbox Code Playgroud)
Just x <- ls列表推导中的特殊语法意味着从中绘制元素ls并将其丢弃(如果它不是a)Just.否则x通过匹配值的模式进行分配Just x.
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |