fpdart 0.6.0-dev.1 copy "fpdart: ^0.6.0-dev.1" to clipboard
fpdart: ^0.6.0-dev.1 copied to clipboard

outdated

Functional programming in Dart and Flutter. All the main functional programming types and patterns fully documented, tested, and with examples.

0.6.0-dev.1 8 March 2023 #

  • Do notation #97 πŸŽ‰

0.5.0 4 March 2023 #

  • Updates to Option type #92 [⚠️ BREAKING CHANGE]
    • Added const factory constructor for None (fixes #95)
    • Removed Alt and Foldable type classes, the following methods are not available anymore
      • foldLeft
      • foldRight
      • foldMap
      • foldRightWithIndex
      • foldLeftWithIndex
      • length
      • any
      • all
      • concatenate
      • plus
      • prepend
      • append
  • Updated examples and fixed lint warnings #93 (thanks to tim-smart πŸŽ‰)

0.4.1 25 February 2023 #

  • New methods for Option type (thanks to tim-smart πŸŽ‰)
    • flatMapNullable
    • flatMapThrowable
final option = Option.of(10);

option.flatMapNullable((a) => a + 1); /// πŸ‘ˆ `Some(11)`
option.flatMapThrowable((a) => a + 1); /// πŸ‘ˆ `Some(11)`

option.flatMapNullable<int>((a) => null); /// πŸ‘ˆ `None()`
option.flatMapThrowable<int>((a) => throw "fail"); /// πŸ‘ˆ `None()`
  • Improved support fromJson for Option type (thanks [again] to tim-smart πŸŽ‰)
    • Allow for decoding of non-primitive types (with custom fromJson constructors)
/// `fromJson` on `DateTime` with `Option` type
final now = DateTime.now();
Option<DateTime>.fromJson(now.toIso8601String(), (a) => DateTime.parse(a as String)); /// πŸ‘ˆ `Some(now)`

Option<DateTime>.fromJson("fail", (a) => DateTime.parse(a as String)); /// πŸ‘ˆ `None()`
  • New extension methods for Map (thanks [once again] to tim-smart πŸŽ‰)
    • extract
    • extractMap
final map = <String, dynamic>{'a': 1, 'b': 2, 'c': 3, 'd': 4};
map.extract<int>('b'); /// πŸ‘ˆ `Some(2)`
map.extract<String>('b'); /// πŸ‘ˆ `None()`, not of type `String` ⚠️

final map = <String, dynamic>{'a': 1};
map.extractMap('a'); /// πŸ‘ˆ `None()`, not a `Map`

final map = <String, dynamic>{'a': {'b': 2} };
map.extractMap('a'); /// πŸ‘ˆ `Some({'b': 2})`
  • Option.of and Option.none factories const (thanks to f-person πŸŽ‰)

Note: People who have the prefer_const_constructors lint enabled will notice a warning to use const 🀝

  • New managing_imports example (thanks to RandalSchwartz πŸŽ‰)
  • Updated README introduction

0.4.0 16 December 2022 #

  • Added extension methods to work with nullable types (T?)
    • From T? to fpdart's types
      • toOption
      • toEither
      • toTaskOption
      • toIOEither
      • toTaskEither
      • toTaskEitherAsync
      • fromNullable (Either, IOEither, TaskOption TaskEither)
      • fromNullableAsync (TaskEither)
    • From fpdart's types to T?
      • toNullable (Either)
/// [Option] <-> `int?`
int? value1 = 10.toOption().map((t) => t + 10).toNullable();

bool? value2 = value1?.isEven;

/// `bool?` -> [Either] -> `int?`
int? value3 = value2
    .toEither(() => "Error")
    .flatMap((a) => a ? right<String, int>(10) : left<String, int>("None"))
    .toNullable();

/// `int?` -> [Option]
Option<int> value4 = (value3?.abs().round()).toOption().flatMap(Option.of);
  • Added toIOEither to Either
  • Removed parameter from Either fromNullable [⚠️ BREAKING CHANGE]
final either = Either<String, int>.fromNullable(value, (r) => 'none');

/// πŸ‘† Removed the value `(r)` (it was always null anyway πŸ’πŸΌβ€β™‚οΈ) πŸ‘‡

final either = Either<String, int>.fromNullable(value, () => 'none');
  • Added chainEither to TaskEither
  • Added safeCast (Either and Option)
  • Added safeCastStrict (Either and Option)
int intValue = 10;

/// Unhandled exception: type 'int' is not a subtype of type 'List<int>' in type cast
final waitWhat = intValue as List<int>;
final first = waitWhat.first;

/// Safe 🎯
final wellYeah = Either<String, List<int>>.safeCast(
  intValue,
  (dynamic value) => 'Not a List!',
);
final firstEither = wellYeah.map((list) => list.first);

0.3.0 11 October 2022 #

  • Inverted onSome and onNone functions parameters in match method of Option [⚠️ BREAKING CHANGE] (Read more on why πŸ‘‰ #56)
/// Everywhere you are using `Option.match` you must change this:
final match = option.match(
  (a) => print('Some($a)'),
  () => print('None'), // <- `None` second πŸ‘Ž 
);

/// to this (invert parameters order):
final match = option.match(
  () => print('None'), // <- `None` first πŸ‘
  (a) => print('Some($a)'),
);
  • Added traverse and sequence methods (#55)
    • traverseList
    • traverseListWithIndex
    • sequenceList
    • traverseListSeq
    • traverseListWithIndexSeq
    • sequenceListSeq
/// "a40" is invalid πŸ’₯
final inputValues = ["10", "20", "30", "a40"];

/// Verify that all the values can be converted to [int] πŸ”
///
/// If **any** of them is invalid, then the result is [None] πŸ™…β€β™‚οΈ
final traverseOption = inputValues.traverseOption(
  (a) => Option.tryCatch(
    /// If `a` does not contain a valid integer literal a [FormatException] is thrown
    () => int.parse(a),
  ),
);
  • Added bindEither method in TaskEither (#58)
/// Chain [Either] to [TaskEither]
TaskEither<String, int> binding =
    TaskEither<String, String>.of("String").bindEither(Either.of(20));
  • Added lefts, rights, and partitionEithers methods to Either (#57)
final list = [
  right<String, int>(1),
  right<String, int>(2),
  left<String, int>('a'),
  left<String, int>('b'),
  right<String, int>(3),
];
final result = Either.partitionEithers(list);
expect(result.first, ['a', 'b']);
expect(result.second, [1, 2, 3]);
  • Added bimap method to Either, IOEither, and Tuple2 (#57)
  • Added mapLeft method to IOEither (#57)
  • Added fold method to Option (same as match) (#56)
  • Fixed chainFirst for Either, TaskEither, and IOEither when chaining on a failure (Left) (#47) by DevNico πŸŽ‰
  • Added const to all constructors in which it was missing (#59)
  • Minimum environment dart sdk to 2.17.0 ⚠️
environment:
  sdk: ">=2.17.0 <3.0.0"

0.2.0 16 July 2022 #

0.1.0 17 June 2022 #

  • Added idFuture and identityFuture methods (#38) by f-person πŸŽ‰
  • Added mapBoth method to Tuple2 (#30)
  • Fixed linting warnings
  • Fixed issue with upsert method for Map (#37) ⚠️
  • Minimum environment dart sdk to 2.16.0 ⚠️
environment:
  sdk: ">=2.16.0 <3.0.0"

0.0.14 31 January 2022 #

  • Updated package linting to lints

0.0.13 26 January 2022 #

  • New methods to TaskEither, TaskOption, Either, and Option
    • mapLeft (TaskEither)
    • bimap (TaskEither)
    • toTaskEither (Either)
    • toTaskOption (Option)
  • New Blog posts and tutorials section in README

0.0.12 24 October 2021 #

  • Completed IORef type implementation, documentation, and testing

0.0.11 22 September 2021 #

  • Fixed major issue in State and StateAsync implementation [BREAKING CHANGE]
    • Methods flatMap, map, map2, map3, ap, andThen, call, and flatten had an implementation issue that has been now fixed

0.0.10 13 August 2021 #

  • Released introduction to Practical Functional Programming
  • Completed StateAsync type implementation, documentation, and testing
  • Fixed problem with Alt typeclass (#21)
  • Added call method to more easily chain functions in Monad and Monad2

0.0.9 3 August 2021 #

0.0.8 13 July 2021 #

  • Released Part 3 of Fpdart, Functional Programming in Dart and Flutter
  • Added Pure Functional Flutter app example (pokeapi_functional)
  • Added flatMapTask and toTask methods to IO to lift and chain IO with Task
  • Added flatMapTask and toTask methods to IOEither to lift and chain IOEither with TaskEither
  • Added pattern matching extension methods to bool (boolean.dart)
  • Added functions to get random int, double, and bool in a functional way (using IO) (random.dart)
  • Added functions, extension methods, Ord, and Eq instances to DateTime (date.dart)

0.0.7 6 July 2021 #

  • Released Part 2 of Fpdart, Functional Programming in Dart and Flutter
  • Added Compose and Compose2, used to easily compose functions in a chain
  • Added curry and uncurry extensions on functions up to 5 parameters
  • Completed TaskOption type implementation, documentation, and testing
  • Expanded documentation and examples
  • Added TaskEither.tryCatchK and Either.tryCatchK, by tim-smart (#10, #11) πŸŽ‰

0.0.6 29 June 2021 #

  • Released Part 1 of Fpdart, Functional Programming in Dart and Flutter
  • Added functional extension methods on Iterable (List)
  • Completed IOEither type implementation, documentation, and testing
  • Added constF function
  • Added option and optionOf (same as dartz)
  • Added Either.right(r) factory constructor to Either class (same as Either.of(r)) (#3)
  • Added example on reading local file using TaskEither (read_write_file)
  • Added more examples
  • Added constant constructors to Eq and variants, by mateusfccp (#4) πŸŽ‰

0.0.5 20 June 2021 #

  • Completed State type implementation, documentation, and testing
  • Completed Reader type implementation, documentation, and testing
  • Completed IO type implementation, documentation, and testing
  • Merged PR (#2) by jacobaraujo7 πŸŽ‰
    • Added right and left functions to create instance of Either
    • Added id function (same as identity)
    • Added fold method to Either (same as match)
    • Added bind method to Either (same as flatMap)
    • Added bindFuture method to Either, which returns TaskEither

0.0.4 15 June 2021 #

  • Completed Unit type documentation
  • Completed Task type implementation, documentation, and testing
  • Completed TaskEither type implementation, documentation, and testing
  • Completed implementation, documentation, and testing of Foldable instance on Option and Either [BREAKING CHANGE]
  • Completed Tuple2 type implementation, documentation, and testing [BREAKING CHANGE]
  • Renamed fold method of Foldable to foldLeft [BREAKING CHANGE]
  • Updated methods API (foldRight, foldLeft, etc.) of Foldable instances (Option, Either, Tuple) [BREAKING CHANGE]
  • IList not longer working correctly (waiting for a better solution for immutable collections) [BREAKING CHANGE]

0.0.3 13 June 2021 #

  • Changed name of type Maybe to Option to be inline with fp-ts, cats, and dartz [BREAKING CHANGE]

0.0.2 13 June 2021 #

First major release:

Types #

  • Either
  • IList
  • Maybe
  • Reader
  • State
  • Task
  • TaskEither
  • Tuple
  • Unit

Typeclasses #

  • Alt
  • Applicative
  • Band
  • BoundedSemilattice
  • CommutativeGroup
  • CommutativeMonoid
  • CommutativeSemigroup
  • Eq
  • Extend
  • Filterable
  • Foldable
  • Functor
  • Group
  • Hash
  • HKT
  • Monad
  • Monoid
  • Order
  • PartialOrder
  • Semigroup
  • Semilattice

Examples #

  • Either
  • curry
  • Maybe
  • Reader
  • State

0.0.1 28 May 2021 #

  • Eq
  • Hash
  • PartialOrder
1.06k
likes
0
points
179k
downloads

Publisher

verified publishersandromaglione.com

Weekly Downloads

Functional programming in Dart and Flutter. All the main functional programming types and patterns fully documented, tested, and with examples.

Homepage
Repository (GitHub)
View/report issues

Documentation

Documentation

License

unknown (license)

More

Packages that depend on fpdart