explain type declaration madness