     do {
         return try block()
     } catch {
-        die(message)
+        die(message() + newline + "Error: \(error)")
     }
 }
 

    do {
        return try block()
    } catch {
        die()
    }
}

    exit(EXIT_FAILURE)
}

/// Returns the result of @c closure or dies if the result is nil
public func dieIfNil<T>(@autoclosure closure: () -> T?) -> T {
    guard let result = closure() else { die() }
    return result
}

/// Dies if the result of @c closure is not nil, useful when checking for errors
public func dieIfNotNil(@autoclosure closure: () -> Any?) {
    if let object = closure() {
        die("Object was supposed to be nil: \(object) ")
    }
}

/// Convenience method to execute throwing functions and die on throw
/// - parameter message: The error message to print as failure reason
/// - parameter block: The block to execute in which a throw will cause a die()
