当我尝试定义新类型时,我在 ghci 中遇到错误:
Prelude> 数据点 = Pt Int Int <interactive>:1:0: 解析输入“数据”错误 Prelude> 让数据点 = Pt Int Int <interactive>:1:4: 解析输入“数据”错误
我究竟做错了什么?
titaniumdecoy
let a = f b
,我记得当我了解到在 GHCi 中写诸如“让平方 x = x * x”之类的东西就像在 monad中用do
符号写东西时经常提出的观点时,我得到了这种 GHCi 谜团的帮助IO
——比如在这种例子中:
palindromize :: IO ()
palindromize = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
同样,当您在 GHCi 中重新定义表达式时,有点像在do
符号中执行以下操作,这是完全合法的:
makeMess :: IO ()
makeMess = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
let b = a
putStrLn (a ++ b)
没有人会在这样的序列中间声明数据类型,而是在模块的其他地方声明。我可能已经猜到存在某种理论上的反对意见,但 Don S. 的评论表明没有。
仅作为历史参考,HBI Haskell 交互环境允许在命令行中使用完整的 Haskell,包括类型、类等。没有先验的GHCi 不能类似地操作,用户可以编写一个前端到 GHC-API 来支持这个......
ghci 不允许您从交互式输入中定义类型——相反,您需要将类型定义放在一个文件中,然后:load
将该文件放入 ghci。