dfunc 0.9.0 copy "dfunc: ^0.9.0" to clipboard
dfunc: ^0.9.0 copied to clipboard

Functional batteries for Dart. Implementation of Either, Optional etc.

Pub Version codecov

Lightweight and practical functional library for Dart programming language.

The goal of this library is not having deep and hardcore FP features. If you need them, take a look at dartz package.

dfunc instead, provides some practical features based on FP principles, that we use extensively in our production codebase. We try to keep the library aligned with "Dart way" of doing things, instead of turning it into Haskell or Scala :)

Optional #

There's no Optional type. Since nullsafety is introduced, nullable types cover the majority of use-cases for them. Instead, dfunc provides you some extensions for nullable types.

maybeMap and maybeFlatMap #

void main() {
  String? x = null;
  x.maybeMap((x) => x.toUpperCase()); // null

  x = 'test';
  x.maybeMap((x) => x.toUpperCase()); // 'TEST'

  x.maybeFlatMap((x) => x == 'test' ? 'OK' : null); // 'OK'

Both maybeMap and maybeFlatMap can be replaced with let if you prefer Kotlin-style:

void main() {
  String? x = null;
  x?.let((x) => x.toUpperCase()); // null

  x = 'test';
  x?.let((x) => x.toUpperCase()); // 'TEST'

  x?.let((x) => x == 'test' ? 'OK' : null); // 'OK'

The differences are:

  • you don't need ?. with maybe* functions, they unwrap the value automatically;
  • you can enforce the function in maybeMap to return non-nullable result.

maybeWhere #

Same as you can filter the list with where method to remove undesired values (and probably get an empty list), you can use maybeWhere to "filter" optional value. As a result you will get either the value itself, or null if the condition is not satisfied:

void main() {
  final List<int> a = [1];
  a.where((e) => e == 1); // [1]
  a.where((e) => e == 2); // []

  final int b = 1;
  b.maybeWhere((e) => e == 1); // 1
  b.maybeWhere((e) => e == 2); // null

Either #


Utilities #


Features and bugs #

Please file feature requests and bugs at the issue tracker.

pub points


verified publisherookamikb.dev

Functional batteries for Dart. Implementation of Either, Optional etc.

Repository (GitHub)
View/report issues


API reference


BSD-2-Clause (LICENSE)


Packages that depend on dfunc