我只是开始看一下Haskell(我以前的FP经验是Scheme),我came across this code:

do { putStrLn "ABCDE" ; putStrLn "12345" }

对我来说,这是过程编程,如果有的话-尤其是由于副作用的连续性。

有人可以解释一下此代码在任何方面如何“起作用”吗?

最佳答案

尽管它看起来像是一个程序程序,但是上面的语法被转换为功能程序,如下所示:

   do { putStrLn "ABCDE" ; putStrLn "12345" }
=>
   IO (\ s -> case (putStrLn "ABCDE" s) of
                  ( new_s, _ ) -> case (putStrLn "12345" new_s) of
                                      ( new_new_s, _) -> ((), new_new_s))

也就是说,一系列嵌套函数具有唯一的世界参数,通过它们,可以“按程序方式”对原始函数的调用进行排序。此设计支持将命令性编程编码为功能语言。

关于该设计的语义决策的最佳介绍是"The Awkward Squad" paper,

关于haskell - Haskell中的I/O功能正常吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6399702/

10-10 05:48