Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tofu-tf/tofu

Functional programming toolbox
https://github.com/tofu-tf/tofu

concurrent config effects functional-programming hacktoberfest logging optics reader-monad tagless-final typeclasses

Last synced: about 1 month ago
JSON representation

Functional programming toolbox

Awesome Lists containing this project

README

        

# ToFu

[![Build & Release](https://github.com/tofu-tf/tofu/workflows/Scala%20CI/badge.svg)](https://github.com/tofu-tf/tofu/actions?query=workflow%3A%22Scala+CI%22)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/tf.tofu/tofu-core-ce3_2.13/badge.svg)](https://maven-badges.herokuapp.com/maven-central/tf.tofu/tofu-core-ce3_2.13)
[![Sonatype Nexus (Snapshots) badge](https://img.shields.io/nexus/s/https/oss.sonatype.org/tf.tofu/tofu-core-ce3_2.13.svg)](https://oss.sonatype.org/content/repositories/snapshots/tf/tofu/tofu-core-ce3_2.13/)
[![Discord Chat](https://img.shields.io/discord/657318688025739283.svg)](https://discord.gg/qPD5GGH)
[![Zulip](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://tofu-tf.zulipchat.com)
[![Scala Steward badge](https://img.shields.io/badge/Scala_Steward-helping-blue.svg?style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAVFBMVEUAAACHjojlOy5NWlrKzcYRKjGFjIbp293YycuLa3pYY2LSqql4f3pCUFTgSjNodYRmcXUsPD/NTTbjRS+2jomhgnzNc223cGvZS0HaSD0XLjbaSjElhIr+AAAAAXRSTlMAQObYZgAAAHlJREFUCNdNyosOwyAIhWHAQS1Vt7a77/3fcxxdmv0xwmckutAR1nkm4ggbyEcg/wWmlGLDAA3oL50xi6fk5ffZ3E2E3QfZDCcCN2YtbEWZt+Drc6u6rlqv7Uk0LdKqqr5rk2UCRXOk0vmQKGfc94nOJyQjouF9H/wCc9gECEYfONoAAAAASUVORK5CYII=)](https://scala-steward.org)

**Functional programming toolkit aimed at taming the complexity of Tagless Final approach.**

# Quick Start

## see [the docs on the microsite](https://tofu-tf.github.io/tofu)

## see the [examples in the `examples` directory](https://github.com/tofu-tf/tofu/tree/master/examples)

To use the whole utils pack just add to your `build.sbt`:

```scala
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](https://github.com/typelevel/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](https://github.com/tofu-tf/derevo) annotations
* `tofu-doobie` for [Doobie](https://github.com/tpolecat/doobie) utils
* `tofu-enums` for [Enumeratum](https://github.com/lloydmeta/enumeratum) utils
* `tofu-env` for `Env` (a variation of a Reader Monad based on [Monix](https://github.com/monix/monix) Task)
* `tofu-fs2-interop` for interop with [fs2](https://github.com/functional-streams-for-scala/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](https://github.com/fthomas/refined)
* `tofu-logging-shapeless` for interop between tofu-logging and [Shapeless](https://github.com/milessabin/shapeless) tag
* `tofu-logging-log4cats` for interop with [Log4Cats](https://github.com/typelevel/log4cats)
* `tofu-memo` for caching utils
* `tofu-observable` for `monix.reactive.Observable` utils
* `tofu-zio-interop` for interop with [ZIO](https://zio.dev) (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!](https://github.com/tofu-tf/tofu/edit/master/README.md)

Raiffeisen Bank Russia

Risk Management Solutions

# 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](https://twitter.com/impurepics)