Abstract algebra and category theory for javascript