【问题标题】:Why can't I define a new type in ghci?为什么我不能在 ghci 中定义一个新类型?
【发布时间】:2011-03-08 18:47:02
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

  • @newacct:我在问你链接到的问题之前问了这个问题。
  • 正如 Alexey Romanov 下面所说,您可以在 ghc 7.4.1 及更高版本中使用。

标签: haskell ghci


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      titaniumdecoy,当我了解到在 GHCi 中编写诸如“让平方 x = x * x”之类的东西就像用 do 编写 let a = f b IO monad 中的符号——比如这种例子:

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

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-07
          • 1970-01-01
          相关资源
          最近更新 更多