10.0.0-M5 : Cyclops Pure module and reactive-streams based IO Monad
Milestone 5 of Cyclops X
M5 of Cyclops X introduces another new module cyclops-pure. Cyclops Pure provides additional control structures, typeclass definitions and instances for pure category theoritic functional programming in Java. Cyclops Pure simulates Higher Kinded Types using Witness Types (see Simulating Higher Kinded Types in Java ).
Cyclops X
Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.
What’s new Cyclops X
-> Enhancements over cyclops-react 2
- Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
- Structural Pattern Matching API (deconstruct algebraic product and sum types)
- Improved type safety via the removal of unsafe APIs
-- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
-- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example) - Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
- Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
- Group id is changed to com.oath.cyclops
- Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
- Light weight dependencies : reactive-streams API & Agrona
What’s new Cyclops X Milestone 5
- Pure functional programming Module
- flatMap and map Operators on Trampoline
- reactive-streams based IO Monad
- Safe PartialFunction API
Changelog
Check out the features delivered and bugs fixed -
Dependency changes
Cyclops no longer depends on pCollections or jOOλ
Get cyclops X
Gradle
Cyclops
compile 'com.oath.cyclops:cyclops:10.0.0-M5’
Cyclops AnyM
compile 'com.oath.cyclops:cyclops-anym:10.0.0-M5’
Cyclops Futurestream
compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-M5’
Cyclops Pure
compile 'com.oath.cyclops:cyclops-pure:10.0.0-M5’
Maven
Cyclops
<dependency>
<groupId>com.oath.cyclops</groupId>
<artifactId>cyclops</artifactId>
<version>10.0.0-M5</version>
</dependency>
Cyclops AnyM
<dependency>
<groupId>com.oath.cyclops</groupId>
<artifactId>cyclops-anym</artifactId>
<version>10.0.0-M5</version>
</dependency>
Cyclops Futurestream
<dependency>
<groupId>com.oath.cyclops</groupId>
<artifactId>cyclops-anym</artifactId>
<version>10.0.0-M5</version>
</dependency>
Cyclops Pure
<dependency>
<groupId>com.oath.cyclops</groupId>
<artifactId>cyclops-pure</artifactId>
<version>10.0.0-M5</version>
</dependency>
Documentation
Articles
- Reactive programming with Java 8 and simple-react: The Tutorial
- JDK Collection eXtensions
- Awesome Fluent Functions
- Straightforward Structural Pattern Matching
- Performant Functional Try
- Articles on medium
- Introducting the Cyclops Monad API
- Easier Try with Cyclops
- 4 flavors of Java 8 Functions
- Memoise Functions in Java 8
- Strategy Pattern in Java 8
- Functional Feature Toggling
- Dependency injection using the Reader Monad in Java8
- Scheduling a Stream
- Neophytes guide to Java 8 : Welcome to the Future
- Deterministic and Non-Deterministic Finite State Machines with Cyclops
License
cyclops-react is licensed under the Apache 2.0 license.