gpt4 book ai didi

haskell - TemplateHaskell 未安装...那么它是

转载 作者:行者123 更新时间:2023-12-01 21:42:11 25 4
gpt4 key购买 nike

我正在用 Haskell 编写一个程序,它涉及很多括号。因此,为了清理这个丑陋的困惑局面,我使用了几次 $ 运算符以使其更易于阅读。例如:

longFunc arg1 (anotherFunc (yetAnotherFunc arg2))

被替换为

longFunc arg1 $ anotherFunc $ yetAnotherFunc arg2

但是当我使用 GHCi 编译我的程序时,我收到一条消息:

MyFile.hs:18:18: error:
parse error on input ‘$’
Perhaps you intended to use TemplateHaskell
Failed, modules loaded: none.

这是第 16-18 行:

isDigit :: Char -> Bool
isDigit c =
c `elem` $ ['0'..'9'] ++ "."

我很困惑,因为我曾多次使用 $ 运算符(使用相同的编译器),如下所示:

main = putStrLn $ show 42

所以我将该代码作为测试输入到我的文件中,删除了其他出现的 $,然后将其加载。

成功了!

有人能告诉我发生了什么事吗?

最佳答案

您不能使用 ($)紧跟在另一个中缀运算符之后。第 18 行:

c `elem` $ ['0'..'9'] ++ "."

需要重写为以下选项之一:

  1. 保持括号不变:

    c `elem` (['0'..'9'] ++ "."])
  2. 申请 ($)到一片 elem :

    (c `elem`) $ ['0'..'9'] ++ "."
  3. 将调用转换为 elem前缀调用:

    elem c $ ['0'..'9'] ++ "."

我推荐选项 3。连续的中缀运算符(在本例中为 `elem`$)没有明确定义的优先级并且会混淆解析器。一般的经验法则是,中缀运算符的每一侧都必须始终具有完整的表达式。 c `elem`不是一个完整的表达式,所以不能出现在$的左边.同样,$ ['0'..'9'] ++ "."不是一个完整的表达式,所以不允许在`elem`的右边.

关于haskell - TemplateHaskell 未安装...那么它是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61229121/

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