apparently `fail` is not cool. because monads.