如何在单个项目存在的列表理解中减少模式匹配的样板

我有一个像下面这样的模式,可以重复很多次。有没有办法摆脱样板?模式是,我正在检查是否至少有一项[Param]与特定构造函数匹配。如果存在这样的项目,我将调用具有该值的数据的函数。如果没有,我会通过。

data Param = UserId Int | PostId Int | ...

...

-- in one function:

  let matches = [uid | x@(UserId uid) <- xs]
  case matches of
      [uid'] -> doSomething uid'
      _ -> return () -- do nothing

-- in another function:
  let matches = [pid | x@(PostId pid) <- xs]
  case matches of
      [pid'] -> doSomethingElse pid'
      _ -> return () -- do nothing

编辑

我不在乎matches最终是否是一个或多个元素。我只想要第一个元素(如果有)。

比克利尔

如果你只关心的第一要素,那么最好的选择是利用listToMaybeData.Maybe与沿maybe功能,你可以这样做:

onSingleton :: Monad m => (a -> m ()) -> [a] -> m ()
onSingleton f = maybe (return ()) f . listToMaybe

那你可以写

onSingleton doSomething [uid | x@(UserId uid) <- xs]
onSingleton doSomethingElse [pid | x@(PostId pid) <- xs]

listToMaybe功能是非常简单的。如果传递给它的列表为空,则返回Nothing,否则返回Just (head list)maybe函数采用何时Nothing传入的默认值,以及应用于内部和Just value传入的函数,因此,将它们一起使用意味着您可以快速将monadic函数应用于列表中的第一个元素,如果该列表不执行任何操作是空的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Scala中理解“与Singleton对象的模式匹配”?

来自分类Dev

案例表达/列表理解中的模式匹配

来自分类Dev

如何减少模块中的样板配置?

来自分类Dev

如何在Perl中匹配单个模式并将其替换为多个模式

来自分类Dev

如何在熊猫中多次提取字符串中存在的单个模式

来自分类Dev

如何对列表中的元素使用模式匹配?

来自分类Dev

如何减少每个类中的Logger.getLogger(...)样板

来自分类Dev

如何在匹配类型列表中使用模式匹配结果?

来自分类Dev

如何减少此功能的样板?

来自分类Dev

如何减少此功能的样板?

来自分类Dev

如何使用Kleisli减少样板

来自分类Dev

如何在Falcor中查找单个项目

来自分类Dev

如何在recyclerview中更新单个项目?

来自分类Dev

减少Flutter中的dispose()样板?

来自分类Dev

如何在python中制作列表理解列表的理解?

来自分类Dev

如何在列表中搜索给定项目的列表是否以相同的顺序存在

来自分类Dev

当用户单击单个项目时,如何在 textview 中显示列表视图数据

来自分类Dev

如何在Java中检查匹配模式

来自分类Dev

如何在 SML 中模式匹配 0.0?

来自分类Dev

如何在2D列表中查找与特定模式匹配的元素

来自分类Dev

如何在列表中的各列之间识别模式匹配索引

来自分类Dev

如何在列表理解中定义变量?

来自分类Dev

如何在单个列表中获得结果?

来自分类Dev

如何在单个列表中获得结果?

来自分类Dev

如何在不更新ReactJs中数组的每个列表的情况下更新数组列表中单个项目的状态

来自分类Dev

如何在钛合金列表视图中定位单个项目?

来自分类Dev

如何在钛合金列表视图中定位单个项目?

来自分类Dev

如何在选择或单击列表中的单个项目时更新 FlatList 中所有项目的 UI 设计

来自分类Dev

如何在列表理解中添加列表列表

Related 相关文章

  1. 1

    如何在Scala中理解“与Singleton对象的模式匹配”?

  2. 2

    案例表达/列表理解中的模式匹配

  3. 3

    如何减少模块中的样板配置?

  4. 4

    如何在Perl中匹配单个模式并将其替换为多个模式

  5. 5

    如何在熊猫中多次提取字符串中存在的单个模式

  6. 6

    如何对列表中的元素使用模式匹配?

  7. 7

    如何减少每个类中的Logger.getLogger(...)样板

  8. 8

    如何在匹配类型列表中使用模式匹配结果?

  9. 9

    如何减少此功能的样板?

  10. 10

    如何减少此功能的样板?

  11. 11

    如何使用Kleisli减少样板

  12. 12

    如何在Falcor中查找单个项目

  13. 13

    如何在recyclerview中更新单个项目?

  14. 14

    减少Flutter中的dispose()样板?

  15. 15

    如何在python中制作列表理解列表的理解?

  16. 16

    如何在列表中搜索给定项目的列表是否以相同的顺序存在

  17. 17

    当用户单击单个项目时,如何在 textview 中显示列表视图数据

  18. 18

    如何在Java中检查匹配模式

  19. 19

    如何在 SML 中模式匹配 0.0?

  20. 20

    如何在2D列表中查找与特定模式匹配的元素

  21. 21

    如何在列表中的各列之间识别模式匹配索引

  22. 22

    如何在列表理解中定义变量?

  23. 23

    如何在单个列表中获得结果?

  24. 24

    如何在单个列表中获得结果?

  25. 25

    如何在不更新ReactJs中数组的每个列表的情况下更新数组列表中单个项目的状态

  26. 26

    如何在钛合金列表视图中定位单个项目?

  27. 27

    如何在钛合金列表视图中定位单个项目?

  28. 28

    如何在选择或单击列表中的单个项目时更新 FlatList 中所有项目的 UI 设计

  29. 29

    如何在列表理解中添加列表列表

热门标签

归档