Add Curried/partially applied form?
oxinabox opened this issue · comments
If everything that takes 2 arguments:
i.e. the Filters and the Transform
had an overload to just take the nonlogger argument,
then it might be prettier
Rather than writing:
const ConsoleLogger(stream, min_level) =
MinLevelLogger(
ActiveFilteredLogger(max_log_filter,
PureConsoleLogger(stream)
),
min_level
)
we could write ∘
const ConsoleLogger(stream, min_level) =
MinLevelLogger(min_level) ∘ ActiveFilteredLogger(max_log_filter) ∘ PureConsoleLogger(stream)
Which would pleasently drive home the compositional nature of the system.
cf this thread
#9 (comment)
I am now thinking overloading constructors so they don't construct is too evil.
Maybe they should all have lowercase varients for that.
Playing with some things
using Logging: Warn, Info
@testset "1 composition Example" begin
constructor_form = MinLevelLogger(FileLogger("warn.log"), Warn))
curried_form = min_level_logger(Warn)(FileLogger("warn.log"))
piped_form = FileLogger("warn.log") |> min_level_logger(Warn)
@test constructor_form == curried_form == piped_form
end
@testset "2 compositions Example" begin
constructor_form = MinLevelLogger(
EarlyFilteredLogger(
log->log._module==Main,
FileLogger("warn.log"),
),
Warn
)
comp_logger1 = min_level_logger(Warn) ∘ EarlyFilteredLogger(log->log._module==Main)
comp_form = comp_logger1(FileLogger("warn.log"))
level_filter = min_level_logger(Warn)
module_filter = EarlyFilteredLogger(log->log._module==Main)
curried_form = level_filter(module_filter(FileLogger("warn.log")))
@test comp_form == constructor_form == curried_form
end
Tee could be weirder,
idk which if any of these should be allowed
using Logging: Warn, Info
@testset "Tee and merge" begin
sink = FileLogger("all.log")
constructed_form = TeeLogger(
MinLevelLogger(sink, Info),
MinLevelLogger(sink, Warn),
);
curried_form = tee_logger(
min_level_logger(Warn),
min_level_logger(Warn)
)(sink)
curried_form2 = tee_logger(
min_level_logger(Warn),
min_level_logger(Warn)
)(sink, sink)
@test constructed_form == curried_form == curried_form2
end