DESIGN: `success` and `fail` return `IO (Maybe Text)`

 Nothing == No errors
 Just e  == `e` is the error message