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 :1:4:输入“数据”时分析错误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不允许您从交互式输入定义类型-相反,您需要将类型定义放入文件中,然后
:将文件加载到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)