I have a call of length xs in the middle of a function, which Stan is unhappy with because of STAN-0103: "Usage of the length function that hangs on infinite lists".
How am I supposed to act on this? Stan offers two suggestions:
- "Don't use
length if you expect your function to work with infinite lists" - nope, I bloody well need the length of the list.
- "Use the
slist library for fast and safe functions on infinite lists" - but it does not seem that Slist.size (Slist.slist xs) is any safer than length xs in case if xs happens to be infinite! Am I supposed to make a non-local refactoring, probably migrate the entire module to Slist? This is likely to be unfeasible or prohibitively expensive in the majority of real-world cases.
I personally do not think that STAN-0103 is worth to complain about, but that's fine, we can agree to disagree. I don't mind opinionated diagnostics, I do mind unactionable ones: if a policy mandates to maintain a clean Stan report, it's virtually impossible to do so.
I have a call of
length xsin the middle of a function, which Stan is unhappy with because of STAN-0103: "Usage of thelengthfunction that hangs on infinite lists".How am I supposed to act on this? Stan offers two suggestions:
lengthif you expect your function to work with infinite lists" - nope, I bloody well need the length of the list.slistlibrary for fast and safe functions on infinite lists" - but it does not seem thatSlist.size (Slist.slist xs)is any safer thanlength xsin case ifxshappens to be infinite! Am I supposed to make a non-local refactoring, probably migrate the entire module toSlist? This is likely to be unfeasible or prohibitively expensive in the majority of real-world cases.I personally do not think that STAN-0103 is worth to complain about, but that's fine, we can agree to disagree. I don't mind opinionated diagnostics, I do mind unactionable ones: if a policy mandates to maintain a clean Stan report, it's virtually impossible to do so.