Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a Why section to README #1052

Merged
merged 2 commits into from
Jun 29, 2016
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ The name is a playful shortening of the word *category*.

![cats image](http://plastic-idolatry.com/erik/cats2.png)

#### Why?

Scala provides many tools for functional programming such as algebraic data types, higher kinded types
and implicits. However, common abstractions such as `Monoid`, `Monad`, and `Traverse` are currently missing from
the standard library, leaving a bit to be desired. Among the goals of Cats is to fill this gap, and to provide a
foundation for an [ecosystem of pure, typeful libraries](http://typelevel.org/projects/).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warning: bike shedding - I'm sorry.

However, common abstractions such as Monoid, Monad, and Traverse are currently missing from the standard library, leaving a bit to be desired.

The word missing here suggests that Monoid etc should be in the standard library, which is an opinion that many may hold, but at the end of the day is an opinion. I'd be inclined to focus on the positive rather than the negative. What do you think of something like the following?

The scala language supports both object-oriented and functional programming, and this is reflected in the hybrid OO/FP approach of its standard library. Cats is an exploration into what the standard library might look like if it focused mostly on functional programming. It takes advantage of scala features such as implicits and higher-kinded types to provide type classes such as Monoid, Monad, and Traverse, which provide composable abstractions for common use-cases. While Cats encourages reuse of some standard library data structures such as List and Option, it also provides some of its own algebraic data types such as Xor and Validated. <Typelevel plug here>


### Getting Started

Cats is currently available for Scala 2.10 and 2.11.
Expand Down