【发布时间】:2017-11-08 20:43:45
【问题描述】:
我有这个函数的类型问题
type Store = [(String, Float)]
evalParser :: String -> Store -> Float -- Boring function who returns a Float
programme :: Store -> IO()
programme store = do
putStr "@EvmInteractif:$> "
instruction <- getLine
putStrLn (show instruction)
if (estCommande (instruction) == True) then
do
res <- evalParser instruction store
putStrLn "TODO: execution de la commande"
programme store
在 res 的矫揉造作中,我遇到了这个错误:
无法匹配预期类型 IO Float' with actual typeFloat'
在“evalParser”调用的返回类型中
在“do”块的 stmt 中:v
谁能告诉我正确的语法吗? 谢谢
【问题讨论】:
-
使用
let res = ...而不是res <- ... -
estCommande (instruction) == True~estCommande (instruction) -
有点半开玩笑的解决方案:因为
res没有在任何地方使用,您可以删除有问题的行。但只是有点开玩笑,因为这里有一个教训,即:我怀疑你相信仅仅调用evalParser会“做某事”,但它不会。这闻起来像是你犯了一个错误。例如也许evalParser应该返回一个更新的存储以在以后对programme的递归调用中使用,或者您可能打算打印结果,或者两者兼而有之。或者也许你在原版中做了这些,但把它们删掉了做一个最小的例子,在这种情况下,荣誉!