# Parameters

does this change affect me?

If you use Cylc parameters with negative offsets (e.g. `foo<x-1>`).

## Overview

There has been a subtle change in the way negative offsets are handled in parameters.

## Example

If you have a parameter `x` with the values 1, 2 & 3:

```[task parameters]
x = 1..3
```

And use it like so:

```a<x-1> => b<x> => c<x>
```

There is some ambiguity about how this should be interpreted when `x=1` because `<x-1>` would be `0` which is not a valid value for the parameter `x`.

Cylc 7 removed the part of the expression which was out of range resulting in a partial evaluation of that line:

```        b_x1 => c_x1  # x=1
a_x1 => b_x2 => c_x2  # x=2
a_x2 => b_x3 => c_x3  # x=3
```

Whereas Cylc 8 will remove everything after the first out-of-range parameter - `<x-1>` (so the entire line for this example):

```a_x1 => b_x2 => c_x2  # x=2
a_x2 => b_x2 => c_x2  # x=3
```

## Migration

If your workflow depends on the Cylc 7 behaviour, then the solution is to break the expression into two parts which Cylc will then evaluate separately.

```- a<x-1> => b<x> => c<x>
+ a<x-1> => b<x>
+ b<x> => c<x>
```

Resulting in:

```# a<x-1> => b<x>
a_x1 => a_x2  # x=2
a_x2 => a_x3  # x=3

# b<x> => c<x>
b_x1 => c_x1  # x=1
b_x2 => c_x2  # x=2
b_x3 => c_x3  # x=3
```

## Line Breaks

Note that these expressions are all equivalent:

 ```a => b => c ``` ```a => b => c ``` ```a => b => \ c ```