Considering how contrived the implementation of this is, there's no wonder it looks terrible in two languages.
For example, this Python is both better behaved and much, much simpler:
import sys
for filename in sys.argv[1:]:
try:
with open(filename, "rb") as file:
word_count = sum(len(line.split()) for line in file)
except IOError as e:
print(e)
else:
print("{}: {}".format(filename, word_count))
I'd suggest you think up an example that justifies its implementation before making such a comparison. If the aim is to make both implementations do the same dance, not just to make them give the same results, even Haskell won't look much different to C++.