runThrow (throwError e >>= k) = runThrow (throwError e)
foo :: IO (String, String, String) foo = replicateT getLine
> foo Hello world ! ("Hello","world","!")
>>> pure 1 :: Maybe Int Just 1
>>> pure 'z' :: [Char] "z"
>>> pure (pure ":D") :: Maybe [String] Just [":D"]