36

当我尝试定义新类型时,我在 ghci 中遇到错误:

Prelude> 数据点 = Pt Int Int
<interactive>:1:0: 解析输入“数据”错误
Prelude> 让数据点 = Pt Int Int
<interactive>:1:4: 解析输入“数据”错误

我究竟做错了什么?

4

4 回答 4

28

titaniumdecoylet 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. 的评论表明没有。

于 2010-06-27T22:59:45.000 回答
23

从 GHC 7.4.1 开始就有可能。

于 2012-11-07T08:47:01.607 回答
13

仅作为历史参考,HBI Haskell 交互环境允许在命令行中使用完整的 Haskell,包括类型、类等。没有先验的GHCi 不能类似地操作,用户可以编写一个前端到 GHC-API 来支持这个......

于 2010-06-27T17:05:30.153 回答
12

ghci 不允许您从交互式输入中定义类型——相反,您需要将类型定义放在一个文件中,然后:load将该文件放入 ghci。

于 2010-06-27T06:47:12.963 回答