你能把Haskell列表变成一系列的指令吗?

too*_*ays 4 haskell list do-notation

你可以创建一个函数列表,然后按顺序执行它们,也许可以将它们传递给do notation?

我目前正在通过映射数据列表来做这件事,我想知道我是否可以以某种方式调用将结果作为一系列顺序调用传递?

jkf*_*kff 9

像这样的东西?

sequence [putStrLn "Hello", putStrLn "World"]
Run Code Online (Sandbox Code Playgroud)


Nat*_*ers 5

如果这些是函数,即纯函数,那么您可以使用($)或"应用":

execute functions argument = map ($argument) functions
-- execute [id,(1+),(1-)] 12 => [12,13,-11]
Run Code Online (Sandbox Code Playgroud)

当然不能保证顺序发生这种情况,但是你会得到一个返回值列表.

如果这些是行动,即不纯,那么你想要的是sequence_:

sequence_ [putStr "Hello", putStr " world", putStrLn "!"]
Run Code Online (Sandbox Code Playgroud)

sequence_ 自己很容易写:

sequence_ [] = return ()
sequence_ (action:actions) = action >> sequence_ actions
Run Code Online (Sandbox Code Playgroud)

还有一个sequence(没有下划线)运行一系列操作并返回其结果:

main = do
  ss <- sequence [readFile "foo.txt", readFile "bar.txt", readFile "baz.txt"]
  -- or ss <- mapM readFile ["foo.txt", "bar.txt", "baz.txt"]
Run Code Online (Sandbox Code Playgroud)