- prep '(' cs = ['(','(','(','(':cs]
- prep ')' cs = [')',')',')',')':cs]
- prep '^' cs = [')','^','(':cs]
- prep '*' cs = [')',')','*','(','(':cs]
- prep '/' cs = [')',')','/','(','(':cs]
- prep '+' cs = [')',')',')','+','(','(','(':cs]
- prep '-' cs = [')',')',')','-','(','(','(':cs]
- prep c cs = [c:cs]
+ maxb = length ops + 1
+
+ rep :: Char Int [Char] -> [Char]
+ rep c 0 r = r
+ rep c i r = [c:rep c (i-1) r]
+
+ prep '(' cs = rep '(' maxb cs
+ prep ')' cs = rep ')' maxb cs
+ prep c cs = maybe [c:cs] (\(_, s)->rep ')' s [c:rep '(' s cs])
+ (find (isMember c o fst) (zip2 ops [maxb-1,maxb-2..0]))