Documenting Software Systems Using Types