runSymbol transducer transFun (i:input) s result =
 case (transFun transducer (s,S i)) of
  [] -> Nothing
  tl -> case concat $ catMaybes $
         map (\(a,s1) -> apply transducer transFun input s1 (a:result)) tl of
         [] -> Nothing
         xs -> Just xs
runSymbol transducer transFun (i:input) s result =
 case (transFun transducer (s,S i)) of
  [] -> Nothing
  tl -> case concat $ catMaybes $
         map (\(a,s1) -> apply transducer transFun input s1 (a:result)) tl of
         [] -> Nothing
         xs -> Just xs
runSymbol transducer transFun (i:input) s result =
 case (transFun transducer (s,S i)) of
  [] -> Nothing
  tl -> case concat $ catMaybes $
         map (\(a,s1) -> apply transducer transFun input s1 (a:result)) tl of
         [] -> Nothing
         xs -> Just xs