【发布时间】:2016-08-23 11:47:09
【问题描述】:
我倾向于在 Haskell 中使用 forM_,这很像 Ruby 中的 .each 或 Scala 中的 foreach。
import Control.Monad (forM_)
import Network.BSD (getHostByName, hostAddresses)
import Network.Socket (inet_ntoa)
import System.Environment (getArgs)
resolve address = do
ent <- getHostByName address
mapM inet_ntoa (hostAddresses ent)
main = do
args <- getArgs
args `forM_` (\address -> do
ips <- resolve address
ips `forM_` (\ip -> putStrLn $ address ++ "\t" ++ ip))
这对我来说似乎并不习惯,但使用 mapM_ 似乎很笨拙。有没有一种惯用的方式来重写这段代码?
【问题讨论】:
-
不是重复的,但我觉得my answer here 很好地解决了这个问题。我想说像这样使用
forM_完全没问题。 (除了 phadej 说的,for_是更现代的替代品,但实际上它们之间通常没有区别。)
标签: haskell