gpt4 book ai didi

haskell - 在 Haskell 脚本中完成的任何事情都可以在 GHCi session 中重现吗?

转载 作者:行者123 更新时间:2023-12-04 04:54:38 24 4
gpt4 key购买 nike

我要运行函数

act :: IO(Char, Char)
act = do x <- getChar
getChar
y <- getChar
return (x,y)

在 GHCi session 中交互。我在别处看到您可以通过使用分号代替换行符在 session 中定义函数。但是,当我写

act :: IO(Char, Char); act = do x <- getChar; getChar; y <- getChar; return (x,y)

它不编译,说

parse error on input ‘;’

我在别处看到 :{ ... }: 可以用于多行命令,但是输入

:{ act :: IO(Char, Char)

然后按回车键会导致错误——也许我误解了如何使用它们。

除了让这个特殊情况起作用之外,是否有一种通用方法可以获取将在 Haskell 脚本中运行的代码并使其在交互式 session 中运行?

最佳答案

您不能只是插入分号来替换每个换行符。在一行上做事意味着选择退出 layout rule ,因此您必须插入自己的分号和大括号。这意味着您需要知道在没有布局规则的情况下那些大括号和分号在哪里需要。特别是对于这种情况,每个 do block 都需要用大括号括起整个 block ,并在每个操作之间使用分号。布局规则通常会根据缩进为您插入这些内容。

所以要在一行上写这个具体的例子,你可以这样做:

let act :: IO(Char, Char); act = do {x <- getChar; getChar; y <- getChar; return (x,y)}

在足够新的 ghci 版本上,您也可以省略 let

对于足够简单的 do block ,您甚至可以省略大括号。在您的示例中,{} 可能只有一个位置,因此即使您在一行中完成所有操作,GHCI 也会插入它们。但是对于具有多个 do block 或其他多行结构的表达式,如果您希望它们在一行中,则需要显式插入它们。

关于haskell - 在 Haskell 脚本中完成的任何事情都可以在 GHCi session 中重现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53178582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com