当我尝试定义一个新类型时,我在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'
我究竟做错了什么?
我在Windows 7上运行GHC版本7.8.3.
好吧,这不是关于花哨的代码片段.我只是想在这里不是一个菜鸟,实际上用一种模糊地类似于副作用语言结构的方式编译.
我有以下代码:
main =
do {
let x = [0..10];
print x
}
Run Code Online (Sandbox Code Playgroud)
我在这里学到,关键字do对于花哨的monadic表达式来说是一种花哨的语法糖.当我尝试编译它时,我收到以下错误:
main.hs:4:1: parse error on input 'print'
Run Code Online (Sandbox Code Playgroud)
我在其他问题中已经了解到,Haskell中的标签是邪恶的,所以我试图省略它们:
main =
do {
let x = [0..10];
print x
}
Run Code Online (Sandbox Code Playgroud)
而且我失败了,因为解析错误仍然存在.
我也在这里学到,印刷品是花式等价物的语法糖:
main =
do {
let x = [0..10];
putStrLn $ show x
}
Run Code Online (Sandbox Code Playgroud)
但后来我得到了这个错误:
main.hs:4:9: parse error on input 'putStrLn'
Run Code Online (Sandbox Code Playgroud)
试着面对我的绝望,我试着在阅读这个答案之后省略了let关键字:
main =
do {
x = [0..10];
print x
}
Run Code Online (Sandbox Code Playgroud)
然后我得到:
main.hs:4:1: parse error on input '=' …Run Code Online (Sandbox Code Playgroud) import Data.Char (digitToInt)
let f [] = []
f ('\n':',':a) = f ('\n' : a)
f (a:b) = a : f b
main :: IO ()
main = do
ln<-getLine
f ln
print dp
Run Code Online (Sandbox Code Playgroud)
在输入`='上得到解析错误
为什么会这样?