1 Common Mistakes and Incorrect Beliefs By Haskell Beginners
People going from zero to Haskell are likely gain a misunderstanding or miss a point that isn't stressed enough. Here are some mistakes that have been observed from multiple sources.
1.1 IndentationPerhaps the first trip-up - you might understand that indentation defines where a code block starts and the lack of an equal amount of indentation indicates the previous code block ended. What some miss is that
1.2 If / Then / Else
if-then statements must always include an 'else' portion. It might be best not to think of if-then-else as flow control, as in most imperative languages, but think of it as construction of a value using a well formed expression.
x = b ? y : z;
The above is valid, though not common, C code. It states that if
b is true then
x = y otherwise
x = z. Notice how this makes no sense without
x = b ? y;
bis false? One should also recognize that the types returned by the
main = do startNetwork <- askUser "Network? " if startNetwork then do iface <- initNetworkInterface handlePackets iface else return ()
1.3 do NotationIf the do notation page ever exists I'll advice you to check it out. Until then, understand that a missing
This certainly isn't the full picture - for an inverse point of view see do notation considered harmful.