Haskell 模块框架-表格类型不起作用

Haskell 模块框架-表格类型不起作用,haskell,template-haskell,Haskell,Template Haskell,我是一名数据科学家,熟悉R和python等语言。 两个月来我一直在努力学习haskell 人们在haskell中使用一个模块来处理框架,类似于其他语言中的通用包(R中的tidyverse和python中的pandas) 问题是:提取csv数据类型的常用函数只是返回一条消息错误: tableTypes "base" "base.csv" <interactive>:2:1: error: • No instance for (Show Language.Haskell.TH.

我是一名数据科学家,熟悉R和python等语言。 两个月来我一直在努力学习haskell

人们在haskell中使用一个模块来处理框架,类似于其他语言中的通用包(R中的tidyverse和python中的pandas)

问题是:提取csv数据类型的常用函数只是返回一条消息错误:

tableTypes "base" "base.csv"

<interactive>:2:1: error:
    • No instance for (Show Language.Haskell.TH.Lib.DecsQ)
        arising from a use of ‘print’
    • In a stmt of an interactive GHCi command: print it
tableTypes“base”“base.csv”
:2:1:错误:
•没有(Show Language.Haskell.TH.Lib.DecsQ)的实例
因使用“打印”而产生
•在交互式GHCi命令的stmt中:打印它
我无法理解这条消息的意思,也无法在谷歌上找到任何答案。有人能帮我解决吗


模块链接:

您无意中发现了一个案例,涉及Haskell的一些高级功能。问题在于
tableTypes“base”base.csv“
是一个模板haskell拼接。出于某种原因,几年前对ghc进行了修改,允许顶层的裸表达式作为拼接,而不是要求标准拼接语法
$(生成拼接代码的表达式)

但裸表达式语法与ghci不兼容。如果您在ghci中输入一个裸表达式,它将尝试计算并打印它(对于产生IO值的表达式,使用一些特殊规则)

当ghci评估
tableTypes“base”“base.csv”
时,它返回的结果不是Show的实例,因为模板haskell
Q
环境不可打印。它包含一系列函数

这里有几个选项,这取决于您实际要做的事情。您可以在ghci中使用来转储拼接生成的AST。那可能不是你想要的。这更有可能是一种在开发拼接时比在测试使用拼接的库时更有用的工具

您可以在ghci中启用TemplateHaskell扩展,并让它以交互方式执行拼接,但这在某种程度上是很难开始工作的,而且最终也看不到太多


我认为最实际的解决方案是将代码移动到文件中。如果愿意,您可以从ghci加载所述文件-重要的是,在文件上下文中,不再存在任何语法歧义-这肯定是编译时要计算的拼接,而不是交互计算的表达式

我真希望模板Haskell从未被修改为在顶层接受裸表达式。保存3个代币值得它引起的所有混乱吗?我在hoogle找不到
tableTypes
。请提供链接到module@max630也许您需要这样做:您的答案非常好,但即使尝试使用ghc编译该文件,它也不起作用。它显示了同样的问题。你必须更新这个问题。无法在文件中获得相同的错误。仍然有很多方法可以得到一些错误,但是修复取决于错误。