ToFu

Functional programming toolkit aimed at taming the complexity of Tagless Final approach.
Quick Start
To use the whole utils pack just add to your build.sbt:
libraryDependencies += "tf.tofu" %% "tofu" % "latest version in badge"
Of course, you can also specify an exact list of tofu modules that you want to add to your dependencies (used in place
of "tofu"):
tofu-kernel for core independent utils
tofu-kernel-cats-mtl for interop between tofu-kernel and Cats MTL
tofu-core-* for core utils (replace suffix * with ce2 or ce3 depends on which cats-effect version you use)
tofu-core-higher-kind for higher kinded utils
tofu-concurrent for concurrent utils
tofu-config for config utils
tofu-data for data utils
tofu-derivation for derivation utils and derevo annotations
tofu-doobie for Doobie utils
tofu-enums for Enumeratum utils
tofu-env for Env (a variation of a Reader Monad based on Monix Task)
tofu-fs2-interop for interop with fs2
tofu-streams for streaming utils
tofu-logging for the whole set of logging utils (derivation, layout, structured, util, interop)
tofu-logging-derivation for logging derivation only
tofu-logging-layout for logging layout only
tofu-logging-structured for logging structured only
tofu-logging-util for logging util only
tofu-logging-refined for interop between tofu-logging and Refined
tofu-logging-shapeless for interop between tofu-logging and Shapeless tag
tofu-logging-log4cats for interop with Log4Cats
tofu-memo for caching utils
tofu-observable for monix.reactive.Observable utils
tofu-zio-interop for interop with ZIO (core, logging)
tofu-zio-core for ZIO instances only
tofu-zio-logging for ZIO logging only
Adopters
Proud user of ToFu? Feel free to add your company!






Contributing
Please note we use the following labels for automated release descriptions:
chore if your PR does not change any types and runtime semantics
fix if your PR merely fixes incorrect behavior
Formatting
We have an automated check for style conformance. You can run sbt checkfmt before PR.
If you have any trouble during this check, just run sbt fmt and commit again.
Copyright
Copyright the maintainers, 2019-2024
Logos made with love by @impurepics