elemental 0.1.2 elemental: ^0.1.2 copied to clipboard
A toolkit for writing software in dart. Effect-system, dependency management and more!
A toolkit for writing software in dart
Includes:
ZIO
a building block for writing effectful programs. Explore the full API: https://pub.dev/documentation/elemental/latest/elemental/ZIO-class.htmlLayer
for composing dependenciesnucleus
, a simple state and dependency management tool. See more here: https://pub.dev/packages/nucleus- Thanks to the
fpdart
package https://pub.dev/packages/fpdart:Option
Either
- Immutable data structures, thanks to https://pub.dev/packages/fast_immutable_collections
Usage #
The ZIO<R, E, A>
type represents an synchronous or asynchronous operation.
- The
R
generic is for representing the requirements / environment - The
E
generic is for representing errors - The
A
generic is for the success type
There are a handful of helpful methods to ease composition!
import 'package:elemental/elemental.dart';
ZIO<NoEnv, Never, String> greeting(String name) => ZIO(() => "Hello $name!")
// Note `ZIO<NoEnv, Never, String>` can be shortened to `IO<String>`.
// Here we create a simple wrapper around `print`
IO<Unit> log(String message) => IO(() => print(message)).asUnit;
// And compose them together!
greeting.tap(log).run();
It is worth noting that the above will run synchronously. Only when you start
using Future
's in your program, will things run asynchronously.
Layers #
A quick intro to services and layers can be found in example/
.