Field equality

@SamRoberts correct me if I'm wrong but if we really do functional programming there is little danger to having no access control. Our functions should be referentially transparent so if we modify the implementation it should not impact the user (unless we change the type signature) and we should use namespaces to separate official API from under the hood stuff.