Freestyle alternatives and similar packages
Based on the "Extensions" category.
Alternatively, view Freestyle 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 -
scala.meta
Library to read, analyze, transform and generate Scala programs -
Enumeratum
A type-safe, reflection-free, powerful enumeration implementation for Scala with exhaustive pattern match warnings and helpful integrations. -
Scala-Logging
Convenient and performant logging library for Scala wrapping SLF4J. -
Chimney
Scala library for boilerplate-free, type-safe data transformations -
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 - -
Squid
Squid – type-safe metaprogramming and compilation framework for Scala -
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 Freestyle or a related project?
README
Documentation
Full documentation available at http://frees.io
Build purely functional applications and libraries
Build stack-safe purely functional applications and libraries that support parallel and sequential computations where declaration is decoupled from interpretation. Freestyle encourages programs built atop Free algebras that are interpreted at the edge of your application ensuring effects are localized and performed in a controlled environment. Applications built with Freestyle can be interpreted to any runtime semantics supported by the interpreter target type.
import freestyle.free._
@free trait Database {
def get(id: UserId): FS[User]
}
@free trait Cache {
def get(id: UserId): FS[User]
}
@module trait Persistence {
val database: Database
val cache: Cache
}
Automatic Dependency Injection
Freestyle includes all the implicit machinery necessary to achieve seamless dependency injection of @free
and @module
Algebras.
Simply require any of your @free
or @module
trait as implicits where needed.
def storedUsers[F[_]]
(userId: UserId)
(implicit persistence: Persistence[F]): FreeS[F, (User, User)] = {
import persistence._
for {
cachedUser <- cache.get(userId)
persistentUser <- database.get(userId)
} yield (cachedUser, persistentUser)
}
Ready to use integrations
Freestyle ships with ready to use algebras and convenient syntax extensions covering most of the application concerns such as persistence, configuration, logging, etc.
In addition Freestyle includes commonly used FP effects stack such as option
, error
, reader
, writer
, state
based on the capabilities of
the target runtime interpreters.
def loadUser[F[_]]
(userId: UserId)
(implicit
doobie: DoobieM[F],
logging: LoggingM[F]): FreeS[F, User] = {
import doobie.implicits._
for {
user <- (sql"SELECT * FROM User WHERE userId = $userId"
.query[User]
.unique
.liftFS[F])
_ <- logging.debug(s"Loaded User: ${user.userId}")
} yield user
}
Modules
freestyle - Core module including building blocks for boilerplate free FP programs and apps over Free monads and cats.
effects - MTL style effects such as reader, writer, state, error, and more modeled as free algebras.
logging - A purely functional logging algebra over Verizon's Journal.
cache - A generic cache with in memory and redis based implementations.
Integrations
fetch - Integration with the Fetch library for efficient data access from heterogenous datasources.
fs2 - Integration to run fs2 Streams in Freestyle programs.
monix - Instances and utilities to interpret to
monix.eval.Task
.slick - Embedding of DBIO actions in Freestyle programs.
doobie - Embedding of Doobie ConnectionIO actions in Freestyle programs.
http - Adapters and marshallers to run the Freestyle program in endpoint return types for akka-http, finch, http4s and play.
Freestyle Artifacts
Freestyle is compatible with both Scala JVM and Scala.js.
This project supports Scala 2.11 and 2.12. The project is based on scalameta.
To use the project, add the following to your build.sbt:
addCompilerPlugin("org.scalameta" % "paradise" % "3.0.0-M11" cross CrossVersion.full)
For Scala.jvm:
// required
libraryDependencies += "io.frees" %% "frees-core" % "0.8.2"
// optional - effects and patterns
libraryDependencies += "io.frees" %% "frees-effects" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-async" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-async-cats-effect" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-async-guava" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-cache" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-config" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-logging" % "0.8.2"
// optional - integrations
libraryDependencies += "io.frees" %% "frees-cache-redis" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-doobie" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-fetch" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-akka" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-finch" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-http-client" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-http4s" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-monix" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-play" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-slick" % "0.8.2"
libraryDependencies += "io.frees" %% "frees-twitter-util" % "0.8.2"
For Scala.js:
// required
libraryDependencies += "io.frees" %%% "frees-core" % "0.8.2"
// optional - effects and patterns
libraryDependencies += "io.frees" %%% "frees-effects" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-async" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-async-cats-effect" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-async-fs2" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-async-monix" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-cache" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-http-client" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-logging" % "0.8.2"
// optional - integrations
libraryDependencies += "io.frees" %%% "frees-fetch" % "0.8.2"
libraryDependencies += "io.frees" %%% "frees-monix" % "0.8.2"
Freestyle Examples
- [todolist-lib](./modules/examples/todolist-lib).
- [todolist-http-http4s](./modules/examples/todolist-http-http4s).
- [todolist-http-finch](./modules/examples/todolist-http-finch).
- [slick-example](.modules/examples/slick-example).
Commercial Support
47 Degrees offers commercial support for the Freestyle framework and associated technologies. To find out more, visit 47 Degrees' Open Source Support.
Copyright
Freestyle is designed and developed by 47 Degrees
Copyright (C) 2017-2018 47 Degrees. http://47deg.com
*Note that all licence references and agreements mentioned in the Freestyle README section above
are relevant to that project's source code only.