Has to implement both functions as arguments and type place holders (variables) for type constructors.