do内のletがパターンマッチに失敗した例外をキャッチする方法?

こんなコードではまってた。

import Control.Exception
main = try doIO >>= print
doIO = do [x] <- return $ [1, 2]
          return x
-- Left user error (Pattern match failure in do expression at c:/home/tmp/hoge.hs:3:10-12)
import Control.Exception
main = try doIO >>= print
doIO = do let [x] = [1, 2]
          return x
-- Right *** Exception: c:/home/tmp/hoge.hs:3:14-25: Irrefutable pattern failed for pattern [x]

後者の例外をキャッチするのはどうすればいいんだろう... ええっと、doの中のletってどんなsyntax sugarだっけ?