今までのは (do-state (x <- state-get >> get >> get :in (put (dec x)) >> get)) とかされると動かなかったけど、もし構文木が (>> (>> (>> state-get get) get) get) みたいに再帰していたら掘るようにした