can't enforce purely function implementation