No, that statement evaluates to a pure value of type int. In the process, it does something else as well that effects the visible behavior of the program.
The C equivalent of
putStrLn "hello"
is probably actually
void putsHello(void) {
puts("hello");
}
Unfortunately, function definitions aren't something you can really manipulate at runtime in C.
The statement
is a "pure" value of type int.