guard fix: two successive 'when' means boolean 'OR' not 'AND', so is_integer(n) matches and make call to Factorial.of with a negative value infinite.