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.