1 Common Mistakes and Incorrect Beliefs By Haskell Beginners
People going from zero to Haskell likely gain a misunderstanding or miss a point that isn't stressed enough. Here are some mistakes that have been observed from multiple sources.
Perhaps 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 then' and else must be indented deeper than the if statement (unless .
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.