RAII.scala is a collection of utilities aims to manage native resources in Scalaz.
An asynchronous.Do is an asynchronous value, like scala.concurrent.Future or scalaz.concurrent.Task.
The difference is that resources in Do can be either automatically acquired/released in scope,
or managed by reference counting mechanism.
To use Do, add the following setting to your build.sbt,
libraryDependencies += "com.thoughtworks.raii" %% "asynchronous" % "latest.release"and check the Scaladoc for usage.
Do consists of some monad transformers.
The ability of resource management in Do is provided by the monad transformer ResourceT.
You can combine ResourceT with monads other than asynchronous.Do. For example, a resource manager in synchronous execution.
To use ResourceT for monadic data types whose kind is F[+A](e.g. scalaz.concurrent.Future or scalaz.Name),
add the following setting to your build.sbt:
libraryDependencies += "com.thoughtworks.raii" %% "covariant" % "latest.release"and check the Scaladoc for usage.
To use ResourceT for monadic data types whose kind is F[A](e.g. scalaz.effect.IO),
add the following setting to your build.sbt:
libraryDependencies += "com.thoughtworks.raii" %% "invariant" % "latest.release"and check the Scaladoc for usage.
- Scalaz provides type classes and underlying data structures for this project.
- ThoughtWorks Each provides
monadic/each-like syntax which can be used with this project. - tryt.scala provides exception handling monad transformers for this project.
- future.scala provides the asynchronous task types for this project.
- DeepLearning.scala uses this project for asynchronous executed neural networks.
This library is inspired by Josh Suereth's scala-arm, in which I implemented the reference counting mechanism at first.