当我尝试定义一个新类型时,我在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'
我究竟做错了什么?
app*_*ive 28
titaniumdecoy我记得当我学到了经常提出的观点,即在GHCi中写"let square x = x*x"之类的东西就像在monad let a = f b中用do符号写作一样,我记得在这种GHCi神秘的帮助下IO- 比如说这种例子:
palindromize :: IO ()
palindromize = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
Run Code Online (Sandbox Code Playgroud)
类似地,当您在GHCi中重新定义表达式时,它有点像在do符号中执行以下操作,这是完全合法的:
makeMess :: IO ()
makeMess = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
let b = a
putStrLn (a ++ b)
Run Code Online (Sandbox Code Playgroud)
没有人会在这样的序列中间声明数据类型,但会在模块的其他地方执行.我可能已经猜到存在某种理论上的反对意见,但Don S.的评论表明没有一个.
Don*_*art 13
仅供历史参考,HBI Haskell交互式环境允许在命令行中使用完整的Haskell,包括类型,类等.没有先验的 GHCi无法以类似的方式运行,用户可以编写一个前端支持GHC-API ...