inline infix fun SQLiteDatabase.doInTransaction(f: SQLiteDatabase.() -> Unit) { beginTransaction() try { f() setTransactionSuccessful() } finally { endTransaction() } } // TODO Is there some other sugar for this? fun SQLiteDatabase.delete(table: String, whereClause: String, vararg whereArgs: String): Int = delete(table, whereClause, whereArgs) // This is the wrong abstraction, but it's illustrative fun SQLiteDatabase.deleteUser(username: String) = delete("users", "username = ?", username) fun example() { val db = SQLiteDatabase.create { _, _, _, _ -> throw NotImplementedError() } db resultOf { doInTransaction { deleteUser("tom") deleteUser("dick") deleteUser("harry") } } map { println("OK") } mapErr { println(it.localizedMessage) } }