stojan
12/26/2019, 11:23 AMsimon.vergauwen
12/26/2019, 11:37 AMsimon.vergauwen
12/26/2019, 11:37 AMServiceLogger
could be improved thosimon.vergauwen
12/26/2019, 11:39 AMlogError(::logError) { “Error reading employees from repo” }Looks here you’re calling
logError
on IO
concretely and then passing a lambda there from LoggingService
. It looks like it can be encoded in just a single method within LoggingService
.stojan
12/26/2019, 11:43 AMlogError
is an extension function on IO
fun <A> IO<A>.logError(log: (Throwable, () -> String?) -> IO<Unit>, msg: () -> String? = { null }): IO<A> =
handleErrorWith { log(it, msg).followedBy(IO.raiseError(it)) }
the logError
method reference comes from LoggingService
simon.vergauwen
12/26/2019, 11:45 AMsimon.vergauwen
12/26/2019, 11:45 AMF
later this way 😉stojan
12/26/2019, 11:46 AMsimon.vergauwen
12/26/2019, 11:46 AMstojan
12/26/2019, 11:47 AMTimber.d
without caring about IO and stuff 😂simon.vergauwen
12/26/2019, 11:47 AMsimon.vergauwen
12/26/2019, 11:48 AMTimder.d
out of git since most people have their own preferences/styles of doing debugging/logging.stojan
12/26/2019, 11:49 AMsimon.vergauwen
12/26/2019, 11:49 AMsimon.vergauwen
12/26/2019, 11:49 AMsimon.vergauwen
12/26/2019, 11:49 AMTimber.d
for stuff like Opened Settings Activity
etc, right?simon.vergauwen
12/26/2019, 11:51 AMsimon.vergauwen
12/26/2019, 11:52 AMstojan
12/26/2019, 2:09 PMstojan
12/26/2019, 2:32 PMinterface LoggingService {
fun logError(t: Throwable, msg: () -> String?): IO<Unit>
fun <A> IO<A>.logError(msg: (Throwable) -> String?) =
handleErrorWith { logError(it) { msg(it) }.followedBy(IO.raiseError(it)) }
}
I love this pattern, a simple operation and then deriving a more complex one based on itjimn
12/28/2019, 8:31 PMjimn
12/28/2019, 8:34 PMstojan
12/28/2019, 9:39 PMstojan
12/28/2019, 9:40 PM