scalaz/scalaz — pull request #143 by folone (2012-08-31 12:54:40+00:00)
Title: Added a Ring typeclass.

Thought, if we have a `Group`, why not add a `Ring` (http://mathworld.wolfram.com/Ring.html)? This is a unit ring implementation (with a multiplication identity element, to enable using it to fold structures with multiplication).

```scala
scala> 2 |*| 3
res0: Int = 6

scala> List(1,2,3,4).productl
res1: Int = 24
```

`Float` and `Double` don't have an instance because their multiplication and addition operations round results, which breaks required laws. By the way, they currently have an instance for `Group`, but if you add tests that verify group instance laws, they will fail.