两种风格的代码有何不同啊?

发布于 2022-08-24 13:31:48 字数 646 浏览 14 评论 3

winSSQ count noRed noBlue = do {
    let yesRed =  [1..33] \ noRed;
    let yesBlue = [1..16] \ noBlue;
    bracket (openFile "ssqNum.txt" WriteMode) (hClose) (hd1 -> pickSSQ count yesRed yesBlue hd1);
}
将报错: parse error on input `let' !

但下面代码却正确!

winSSQ count noRed noBlue = do
    let yesRed =  [1..33] \ noRed
    let yesBlue = [1..16] \ noBlue
    bracket (openFile "ssqNum.txt" WriteMode) (hClose) (hd1 -> pickSSQ count yesRed yesBlue hd1)

这是什么原因呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不如归去 2022-08-28 05:32:36

winSSQ count noRed noBlue = do {
    let {yesRed=[1..33] \ noRed; yesBlue=[1..16] \ noBlue};
    bracket (openFile "ssqNum.txt" WriteMode) (hClose) (hd1 -> pickSSQ count yesRed yesBlue hd1);
}
这样就可以了!

暖树树初阳… 2022-08-25 20:21:42

帮flw发的~

前事休说 2022-08-25 19:12:52

因为这里本来是有语法糖的,你用了花括号之后,语法糖不见了,然后就有语法错误了。

写成这样就对了(这也是第二种写法的展开形式):

winSSQ count noRed noBlue = do {
    let yesRed =  [1..33] \ noRed;
    in let yesBlue = [1..16] \ noBlue;
        in bracket (openFile "ssqNum.txt" WriteMode) (hClose) (hd1 -> pickSSQ count yesRed yesBlue hd1);
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文