haskell - 函数末尾的下划线在 Haskell 中是什么意思?

标签 haskell

我注意到一些以 _ 结尾的函数名称在 Haskell 中(例如 mapM_traverse_ )。

这是什么意思?

最佳答案

这只是 Prelude 中的命名约定。通常,没有下划线的函数(例如 traversesequencemapM )返回一些有意义的“聚合”值,而带有下划线的对应函数(例如 traverse_sequence_mapM_ )返回() .通常你会使用第一组函数,但如果你不关心返回值,那么你会使用第二组函数。原因是这些函数通常是一元的;如果您使用返回 () 的函数在单子(monad)上下文中但忽略返回值,GHC 不会发出警告(因为它总是会返回 () ),但如果函数确实给出了您忽略的有意义的返回值,GHC 会发出警告。所以例如do { sequence [print 1,print 2,print 3]; putStrLn "ignoring prev value" }会发出警告,但 do { sequence_ [print 1,print 2,print 3]; putStrLn "ignoring prev value" }将不会。

关于haskell - 函数末尾的下划线在 Haskell 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55740973/

相关文章:

arrays - Haskell 数组索引超出范围

haskell - 使用 Beam 进行子查询

haskell - 解析为自由单子(monad)

haskell - 计算具有折叠之类的树的深度的最通用方法是什么?

haskell - 为什么 ghci 输出 (Num a) => a for :t 4 and not (Ord a) => a?

haskell - 无法将种类 `*' 与 `#' 匹配

haskell - 如何从外部代码确定数据的构造函数?

opencv - 再次讨论 Haskell 中的循环中断

haskell 分组问题

haskell - 是否有一个 Monad 收集结果和 `mappend` s 它们?