【问题标题】:Can't debug haskell type mismatch error无法调试 haskell 类型不匹配错误
【发布时间】:2016-02-01 02:56:28
【问题描述】:

编译代码给出

(+++) :: [a] -> [a] -> [a]
lst1 +++ lst2 = if null lst1
                then []
                else (head lst1) : (tail lst1 +++ lst2)


main :: IO ()
main = do
  putStrLn "start"                                                                                                          
  [1,2,3] +++ [4,5,6]
  putStrLn "end"

无法将预期类型“IO a0”与实际类型“[Integer]”匹配 在 'do' 块的 stmt 中: [1, 2, 3] +++ [4, 5, 6] 在表达式中: 做 { putStrLn "开始"; [1, 2, ....] +++ [4, 5, ....]; putStrLn "结束" } 在“main”的等式中: 主要的 = 做 { putStrLn "开始"; [1, ....] +++ [4, ....]; putStrLn "结束" }

我没有做任何事情 - 对我来说看起来很好。

【问题讨论】:

  • 你需要print $ [1,2,3] +++ [4,5,6]

标签: haskell type-mismatch


【解决方案1】:

要解决不匹配错误,您只需使用“打印”功能即可。像这样:

(+++) :: [a] -> [a] -> [a]
lst1 +++ lst2 = if null lst1
            then []
            else (head lst1) : (tail lst1 +++ lst2)

main :: IO ()
main = do
   putStrLn "start"                                                                                                          
   print ([1,2,3] +++ [4,5,6])
   putStrLn "end"

现在,我不知道你想用 '+++' 函数实现什么,但至少现在你不用担心类型错误。

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多