I removed the `Rational` and `Fractional` instances and changed the `Num`
instances
The `Num` instances did not obey the semiring laws, which was the primary
instigator for this change. However, there is also one very practical reason
for this change, too, which is that the weaker `Monoid` constraint plays
very nicely with `Text` (which is a `Monoid`, but not a `Num`).
This means that now you can do cool things like this for `Shell`:
>>> let x = "1" <|> "2"
>>> let y = "3" <|> "y"
>>> view (x * ", " * y)
"1, 3"
"1, 4"
"2, 3"
"2, 4"
Also, you can now use algebraic operations for `Pattern`s when matching `Text`,
for the same reason.