co-log-polysemy: Composable Contravariant Comonadic Logging Library

[ comonad, contravariant, effects, library, logging, mpl, program ] [ Propose Tags ]

Implementation of the co-log logging based on the polysemy extensible effects library.

The ideas behind this package are described in the following blog post:

For the taggless final implementation of the co-log ideas se the following package:

[Skip to Readme]


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],,,,
Change log
Dependencies base (>= && <4.13), co-log-core (>= && <0.3), co-log-polysemy, polysemy (>= && <0.3) [details]
License MPL-2.0
Copyright 2019 Kowainik
Author Dmitrii Kovanikov
Maintainer Kowainik <>
Revised Revision 1 made by shersh at 2019-05-29T01:51:25Z
Category Logging, Contravariant, Comonad, Effects
Home page
Bug tracker
Source repo head: git clone
Uploaded by shersh at 2019-05-05T13:41:00Z
Distributions NixOS:, Stackage:
Reverse Dependencies 7 direct, 5 indirect [details]
Executables play-colog-poly
Downloads 1866 total (14 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2019-05-05 [all 1 reports]

Readme for co-log-polysemy-

[back to package description]


MPL-2.0 license Build status

co-log-core Hackage Stackage LTS Stackage Nightly
co-log Hackage Stackage LTS Stackage Nightly
co-log-polysemy Hackage Stackage LTS Stackage Nightly

co-log is a composable and configurable logging framework. The idea of the approach is described in the following blog post:

The repository contains the following packages:

  • co-log-core: lightweight package with basic data types and general idea.
  • co-log: taggless final implementation of logging library based on co-log-core.
  • co-log-polysemy: implementation of logging library based on co-log-core and the polysemy extensible effects library.
  • co-log-benchmark: Benchmarks of the co-log library.

See the following tutorial series about the library:


co-log is compared with basic functions like putStrLn. Since IO overhead is big enough, every benchmark dumps 10K messages to output. If benchmark name doesn't contain Message then this benchmark simply dumps string "message" to output, otherwise it works with Message data type from the co-log library.

Benchmarks Time for 10K messages
Prelude.putStrLn 5.117ms
Text.putStrLn 9.220ms
ByteString.putStrLn 2.971ms
mempty 1.181ms
logStringStdout 5.107ms
logPrint 5.248ms
logTextStdout 5.351ms
logByteStringStdout 2.933ms
logByteStringStderr 17.482ms
ByteString > (stdout <> stderr) 17.715ms
Message > format > stdout 9.188ms
Message > format > ByteString > stdout 3.524ms
Message{callstack} > format > stdout 9.139ms
Message{callstack:5} > format > stdout 9.464ms
Message{callstack:50} > format > stdout 9.439ms
Message{Time,ThreadId} > format > stdout 54.160ms
Message{Time,ThreadId} > format > ByteString > stdout 54.137ms