I would like to suggest one thing - small thing - suggest that the function name be called f() instead of a() where f() is a more widely recognised name for a generic function.