[英]Unresolved top-level overloading
我需要在Haskell制作可乐自动售货机,但我遇到了一些问题。 我不太了解Haskell,所以我不知道发生了什么
main = start
return()
start = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
coin <- getChar;
case coin of
1 -> twentyFive
2 -> fifty
3 -> dispensed
otherwise -> do putStr "Select a valid option"
start
twentyFive = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
coin <- getChar;
case coin of
1 -> fifty
2 -> seventyFive
3 -> dispensed
otherwise -> do putStr "Select a valid option"
twentyFive
fifty = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
coin <- getChar;
case coin of
1 -> seventyFive
2 -> dispensed
3 -> dispensed
otherwise -> do putStr "Select a valid option"
fifty
seventyFive = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
coin <- getChar;
case coin of
1 -> dispensed
2 -> dispensed
3 -> dispensed
otherwise -> do putStr "Select a valid option"
seventyFive
dispensed = do putStr "-- Coke Dispensed --"
return()
但是我收到了这个错误:
Unresolved top-level overloading
*** Binding : seventyFive
*** Outstanding context : Num Char
这是什么意思?
你没有缩进seventyFive
的主体, seventyFive
你缩进其他函数的主体一样。
应该像这样缩进:
seventyFive = do putStr "\nSelect a coin\n1. R$0,25\n2. R$0,50\n3. R$1,00\n"
coin <- getChar
case coin of
1 -> dispensed
2 -> dispensed
3 -> dispensed
otherwise -> do putStr "Select a valid option"
seventyFive
错误消息是因为Hugs认为你的函数的第一行也是最后一行。 (你的第二行没有缩进到do
之后的第一行的那一部分。)
顺便说一句,如果可以的话,可以使用GHC而不是Hugs(理想情况下,作为Haskell平台的一部分),因为Hugs已经维护了几年。
不是错误,但你看起来也很奇怪
coin <- getChar;
用。。。来代替
coin <- getChar
更多错误:
main = start
return()
应该
main = do start
return()
或者(因为我们不必拥有main :: IO ()
,我们可以拥有main :: IO anythingWeWant
)
main = start
最后,你正在调用getChar
,它会给你一个Char
,但模式匹配就好像它给你一个数字。 您需要将数字括在单引号中(例如'1'
而不是1
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.