include "LoggingJava" importJava "org.slf4j.MDC" where get :: String -> Maybe String put :: String -> String -> () remove :: String -> () putOrRemove :: String -> Maybe String -> () putOrRemove key (Just value) = put key value putOrRemove key Nothing = remove key @inline withContext :: String -> String -> ( a) -> a withContext key value procedure = result where oldValue = get key put key value result = procedure putOrRemove key oldValue