[Haskell-beginners] Help on first program

John M. Dlugosz ngnr63q02 at sneakemail.com
Fri Mar 28 23:00:27 UTC 2014


Can someone explain what's wrong here?  What is the code below _really_ saying, vs what I 
meant?  I don't understand the error messages yet.

		== input ==
module Main (
     main
) where

solve n src dest tmp =
     do solve (n-1) src tmp      -- line 6
        solve 1 src dest tmp
        solve (n-1) tmp dest	-- line 8

solve 1 src dest _ =
     putStrLn "move a disk from " ++ src ++ " to " ++ dest    -- line 11


main = do
     putStrLn "Towers of Hanoi problem"
     solve 5 "A" "B" "C"


		== output ==
Prelude> :reload
[1 of 1] Compiling Main             ( towers1.hs, interpreted )
Failed, modules loaded: none.
Prelude>
towers1.hs:6:8:
     Couldn't match expected type `[a0]'
                 with actual type `[Char] -> [Char]'
     In the return type of a call of `solve'
     Probable cause: `solve' is applied to too few arguments
     In a stmt of a 'do' block: solve (n - 1) src tmp
     In the expression:
       do { solve (n - 1) src tmp;
            solve 1 src dest tmp;
            solve (n - 1) tmp dest }

towers1.hs:8:8:
     Couldn't match expected type `[Char]'
                 with actual type `[Char] -> [Char]'
     In the return type of a call of `solve'
     Probable cause: `solve' is applied to too few arguments
     In a stmt of a 'do' block: solve (n - 1) tmp dest
     In the expression:
       do { solve (n - 1) src tmp;
            solve 1 src dest tmp;
            solve (n - 1) tmp dest }

towers1.hs:11:5:
     Couldn't match expected type `[Char]' with actual type `IO ()'
     In the return type of a call of `putStrLn'
     In the first argument of `(++)', namely
       `putStrLn "move a disk from "'
     In the expression:
       putStrLn "move a disk from " ++ src ++ " to " ++ dest



More information about the Beginners mailing list