This is where something goes wrong while Hugs is checking that all your function calls have the right type of arguments. This error message is fairly easy to work out. In the call to the function myTake , the first argument has the wrong type. It has type String , whereas the myTake function was expecting an argument of type Integer . It is not hard to see that the call has the arguments the wrong way round.
Generic functions tend to produce a different kind of error message.
In other words, you are trying to arithmetic on a string. Some thought or experimentation may lead you to spot the problem. Hugs thinks you are trying to add one to a string. It is not actually always necessary to give declarations for all functions, as Hugs can often work out the types of your functions. However, the practice of giving a declaration for every definition is a good one, both because it is good documentation, telling the caller what type of arguments to give, and also because it isolates a type bug to a single definition.