haskell - 为什么我不能在 ghci 中定义新类型?

标签 haskell ghci

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

Prelude> data Point = Pt Int Int
<interactive>:1:0: parse error on input `data'
Prelude> let data Point = Pt Int Int
<interactive>:1:4: parse error on input `data'

我做错了什么?

最佳答案

titaniumdecoy,我记得当我了解到经常提到的一点时,在 GHCi 中编写“let square x = x * x”之类的东西就像编写 let a = f bIO monad 中使用 do 表示法——在这种例子中说:

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)

没有人会在这样的序列中间声明数据类型,而是会在模块的其他地方这样做。我可能猜到存在某种理论上的反对意见,但唐·S. 的评论表明不存在这种反对意见。

关于haskell - 为什么我不能在 ghci 中定义新类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126591/

相关文章:

haskell - 在 Haskell 中,我可以让数字文字默认不是多态的吗?

haskell - Haskell 中的多态性

haskell - 在多行 block 中设置 GHCi 提示

haskell - 为什么这会打败 Haskell 的懒惰评估?

haskell---命令行参数文件传递

haskell - Windows 10 上的 ghci 错误 : user specified . o/.so/.DLL 无法加载(addDLL: pthread

haskell - `stack build` 在 Archlinux 上失败,`/usr/bin/ld: final link failed`

haskell - 有没有办法在 ghci 的 let block 中定义的多行函数处设置断点?

http - 在 Haskell 中发送带有 header 的 GET 请求

haskell - Rank 2 多态性的实际应用?