fn can't be None