2015-10-31 2 views
0

Компиляция кода даетНе удается отладить ошибку несоответствия типов Haskell

(+++) :: [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] В зЬтЬ блока «делать» : [1, 2, 3] +++ [4, 5, 6] В выражении: do {putStrLn "start"; [1, 2, ....] +++ [4, 5, ....]; putStrLn "end"} В уравнении для 'main': main = do {putStrLn "start"; [1, ....] +++ [4, ....]; putStrLn "end"}

Что я ничего не сделал - это выглядит хорошо для меня.

+2

Вам нужно «распечатать $ [1,2,3] +++ [4,5,6]'. –

ответ

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" 

Теперь, я не знаю, что вы хотите достичь с помощью функции «+++», но, по крайней мере, теперь вы не волнуйтесь за ошибки типа.

Надеюсь, это помогло!

Смежные вопросы