为什么我不能在ghci中定义一个新的types?

当我尝试定义新types时,出现ghci错误:

 前奏>数据点= Pt Int Int
 <interactive>:1:0:input'data'时parsing错误
 Prelude> let data Point = Pt Int Int
 <interactive>:1:4:在input'data'时parsing错误 

我究竟做错了什么?

我记得当我学到经常提到的在GHCi里写'let square x = x * x'这样的东西,就像在IO monad中写下let a = fb记号一样,帮助了这种GHCi的奥秘 – – 在这种例子中说:

 palindromize :: IO () palindromize = do a <- readFile "foo.txt" let b = reverse a putStrLn (a ++ b) 

同样,当你在GHCi中重新定义一个expression式时,就像在符号中做下面的do ,这是完全合法的:

 makeMess :: IO () makeMess = do a <- readFile "foo.txt" let b = reverse a putStrLn (a ++ b) let b = a putStrLn (a ++ b) 

没有人会在这样的顺序中声明一个数据types ,但会在模块的其他地方执行。 我可能猜到有某种理论上的反对意见,但是唐·S的说法表明没有一个。

从GHC 7.4.1开始是可能的 。

仅供历史参考, HBI Haskell交互式环境允许在命令行上完整的Haskell,包括types,类别等等。 没有先验 GHCi不能操作类似,用户可以写一个前端GHC-API支持这…

ghci不允许你从交互式input中定义types – 相反,你需要把你的types定义放在一个文件中,并把文件:load到ghci中。