cleaned up AlgebraicDataTypes, applicative functors and functors