Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么可以';我不能在ghci中定义一个新类型吗?_Haskell_Ghci - Fatal编程技术网

Haskell 为什么可以';我不能在ghci中定义一个新类型吗?

Haskell 为什么可以';我不能在ghci中定义一个新类型吗?,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' 前奏曲>数据点=Pt Int :1:0:输入“数据”时分析错误 前奏曲>让数据点=Pt Int

尝试定义新类型时,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' 前奏曲>数据点=Pt Int :1:0:输入“数据”时分析错误 前奏曲>让数据点=Pt Int :1:4:输入“数据”时分析错误
我做错了什么?

ghci不允许您从交互式输入定义类型-相反,您需要将类型定义放入文件中,然后
:将文件加载到ghci中。

仅用于历史参考,允许在命令行中使用完整的Haskell,包括类型、类等。没有先例,GHCi不能进行类似的操作,用户可以编写一个前端到GHC-API,以支持此…

titaniumdecoy
,我记得,当我了解到在GHCi中编写类似“let square x=x*x”这样的东西就像在
IO
monad中使用
do
符号编写
let a=f b
时,我得到了帮助

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

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

是。

可能与@newacct重复:在您链接的问题被问到之前,我问了这个问题。正如Alexey Romanov在下面所说,您可以在ghc 7.4.1及更高版本中使用。
makeMess :: IO ()
makeMess = do
   a <- readFile "foo.txt"
   let b = reverse a
   putStrLn (a ++ b)
   let b = a
   putStrLn (a ++ b)