Sto scrivendo un semplice web server in Haskell e sto mettendo un po 'di logging. Ho alcune chiamate a una funzione di registrazione in una catena di IO >>=
. Sembra tutto un po 'manuale. C'è un modo migliore / più "Haskelish"?
log :: (Show a) => String -> a -> IO a
log label val = getCurrentTime >>= \time ->
putStrLn ("[" ++ show time ++ "] [" ++ label ++ "] " ++ (take maxLogLength $ show val)) >>
return val
handle :: Socket -> IO ()
handle conn = recv conn incomingBufferSize >>=
log "request" >>=
log "path" . extractPath . unpack >>=
response >>= log "response" >>=
send conn >>
close conn