thenA :: Auto a q1 -> Auto a q2 -> Auto a (Either q1 q2) thenA (A s11 ini11 ac11 t11) (A s12 ini12 ac12 t12) = (A st init ac2 tr) where (A s1 ini1 ac1 t1) = leftA (A s11 ini11 ac11 t11) (A s2 ini2 ac2 t2) = rightA (A s12 ini12 ac12 t12) st = s1 ++ s2 init = if any ac1 ini1 then ini1 ++ ini2 else ini1 tr (Left x) w = let l = t1 (Left x) w in if (any ac1 l) then l ++ ini2 else l tr (Right x) w = t2 (Right x) w