Note: Many now consider the fail method of Monad to be a failure, as it defaults to throwing an exception. Modern Haskell style tends towards using total functions wherever possible, and this idiom has come increasingly to be frowned upon.