Yes, when people use them. There is no really elegant way of adding a type annotation to a `do` block.
(do x <- pure 1
y <- pure 5
pure (x + y)) :: Maybe Int
It isn't uncommon to have to scan the `do` block for some statement that constrains the monad somehow.This is a known and discussed problem, so I'll refer you to the article usually reference around this issue: https://wiki.haskell.org/Do_notation_considered_harmful