What temperature is my stove? My stovetop has 10 (0 through 9) different settings of heat and a very odd way of cycling through them.

It always starts at 0

When I hit plus it increments the number, unless the number is 9 in which case it becomes 0, or the number is 0 in which case it becomes 9.

When I hit minus it decrements the number, unless the number is zero in which case it becomes 4.


There are no other temperature control buttons.
In this challenge you will take as input a string of commands and output which setting my stovetop ends up on after running that sequence.
Answers will be scored in bytes with fewer bytes being better.
Input
You may take input in any of the following formats:

A list/array/vector/stream of booleans/1s or 0s/1s or -1s
A string (or list/array/vector/stream) of two different characters (which should be consistent for your program)

And you may output

An integer on the range 0-9.

A character on the range '0'-'9'.

A string of size 1 consisting of the above.


Testcases
Input as a string - for decrement and + for increment.
 : 0
- : 4
+ : 9
-- : 3
-+ : 5
+- : 8
++ : 0
--- : 2
--+ : 4
-+- : 4
-++ : 6
+-- : 7
+-+ : 9
++- : 4
+++ : 9
---- : 1
---+ : 3
JavaScript (ES6),  38 37  36 bytes
Expects an array of Boolean values, with false for + and true for -. Returns an integer.

a=&gt;a.map(c=&gt;a=a++?c?a-2:a%10:9&gt;&gt;c)|a

Try it online!
Commented
It's important to note that a++ with a = [ true ] is evaluated to NaN because it's first coerced to the string &quot;true&quot; and then to a number. That's why we can safely re-use the array a[] to store the temperature even when we get the singleton [ true ] as input.
a =&gt;             // a[] = input array, re-used to store the temperature
  a.map(c =&gt;     // for each command c in a[]:
    a =          //   update the temperature:
      a++ ?      //     if a is numeric and not equal to 0
                 //     (increment it afterwards):
        c ?      //       if this is a '-':
          a - 2  //         subtract 2
        :        //       else:
          a % 10 //         apply a modulo 10
      :          //     else:
        9 &gt;&gt; c   //       yield 4 if this is a '-', or 9 if this is a '+'
  ) | a          // end of map(); return the final result