specs and partial implementation