Sauron alternatives and similar packages
Based on the "Extensions" category.
Alternatively, view Sauron alternatives based on common mentions on social networks and blogs.
-
cats
Lightweight, modular, and extensible library for functional programming. -
Cassovary
Cassovary is a simple big graph processing library for the JVM -
Enumeratum
A type-safe, reflection-free, powerful enumeration implementation for Scala with exhaustive pattern match warnings and helpful integrations. -
scala.meta
Library to read, analyze, transform and generate Scala programs -
Scala-Logging
Convenient and performant logging library for Scala wrapping SLF4J. -
Chimney
Scala library for boilerplate-free, type-safe data transformations -
Freestyle
A cohesive & pragmatic framework of FP centric Scala libraries -
Scala Graph
Graph for Scala is intended to provide basic graph functionality seamlessly fitting into the Scala Collection Library. Like the well known members of scala.collection, Graph for Scala is an in-memory graph library aiming at editing and traversing graphs, finding cycles etc. in a user-friendly way. -
tinylog
tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android -
scribe
The fastest logging library in the world. Built from scratch in Scala and programmatically configurable. -
Each
A macro library that converts native imperative syntax to scalaz's monadic expressions -
Rapture
a collection of libraries for common, everyday programming tasks (I/O, JSON, i18n, etc.) -
Stateless Future
Asynchronous programming in fully featured Scala syntax. -
Scala Blitz
Scala framework for efficient sequential and data-parallel collections - -
Records for Scala
Labeled records for Scala based on structural refinement types and macros. -
Play monadic actions
A simple scala DSL to allow clean and monadic style for Play! Actions -
enableIf.scala
A library that toggles Scala code at compile-time, like #if in C/C++ -
Freasy Monad
Easy way to create Free Monad using Scala macros with first-class Intellij support. -
Lamma
Lamma schedule generator for Scala is a professional schedule generation library for periodic schedules like fixed income coupon payment, equity deravitive fixing date generation etc. -
wvlet-log
A library for enhancing your application logs with colors and source code locations. -
Freedsl
Practical effect composition library based on abstract wrapping type and the free monad -
Resolvable
A library to optimize fetching immutable data structures from several endpoints in several formats.
Clean code begins in your IDE with SonarLint
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Sauron or a related project?
README
Sauron

Lightweight lens library in less than [50-lines of Scala](src/main/scala/com/github/pathikrit/sauron/package.scala):
case class Person(address: Address)
case class Address(street: Street)
case class Street(name: String)
val person = Person(Address(Street("1 Functional Rd.")))
import com.github.pathikrit.sauron._
lens(person)(_.address.street.name)(_.toUpperCase)
There is zero overhead; the lens
macro simply expands to this during compilation:
person.copy(address = person.address.copy(
street = person.address.street.copy(
name = (person.address.street.name).toUpperCase)
)
)
Simple setters:
lens(person)(_.address.street.name).setTo("1 Objective Rd.")
Reusable lenses:
val f1 = lens(person)(_.address.street.name)
val p1: Person = f1(_.toLowerCase)
val p2: Person = f1(_.toUpperCase)
Lens factories: The above lens only updates a particular person. You can make even more generic lenses that can update any Person
:
val f = lens(_: Person)(_.address.street.name)
val p3: Person = f(p1)(_.toUpperCase)
val p4: Person = f(p2)(_.toLowerCase)
Lens composition:
val lens1: Person ~~> Address = lens(_: Person)(_.address)
val lens2: Address ~~> String = lens(_: Address)(_.street.name)
val lens3: Person ~~> String = lens1 andThenLens lens2 // or lens2 composeLens lens1
val p5: Person = lens3(person)(_.toLowerCase)
sbt: In your build.sbt
, add the following entries:
resolvers += Resolver.bintrayRepo("pathikrit", "maven")
libraryDependencies += "com.github.pathikrit" %% "sauron" % "1.1.0"
addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0-M5" cross CrossVersion.full)
This library is inspired by the clever work done by @adamw in his quicklens library.