turns out eitherDecodeFile' doesn't have the semantics I thought it did (who writes functions returning either that can still fail??)