newtype-generics
================
A typeclass and set of functions for working with newtypes.
Fork of the code published by Darius Jahandarie [here](http://hackage.haskell.org/package/newtype-0.2),
with the addition of generics.
The 'Newtype' typeclass and related functions: `op`, `ala`, `ala'`, `under`.
Primarly pulled from Conor McBride's Epigram work. Some examples:
```
-- foldMaps the list ala the Sum newtype. This results in 10.
ala Sum foldMap [1,2,3,4]
-- foldMaps the list ala the Product newtype. This results in 24.
ala Product foldMap [1,2,3,4]
-- foldMaps the list ala the Endo newtype. This results in 8.
ala Endo foldMap [(+1), (+2), (subtract 1), (*2)] 3
```
_NB:_ `Data.Foldable.foldMap` is a generalized `mconcatMap` which is a generalized `concatMap`.
This package includes `Newtype` instances for all the (non-GHC/foreign) newtypes in base (as seen in the examples).
However, there are neat things you can do with this with /any/ newtype and you should definitely define your own 'Newtype' instances for the power of this library.
For example, see `ala Cont traverse`, with the proper `Newtype` instance for Cont.
This could of course be eased with the addition of generics for version 0.3:
```
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
(...)
newtype Example = Example Int (deriving Generic)
instance Newtype Example
```