Program<D, A = void>にして、A=voidのときはbeginとendでイテレーターっぽく使えるようになった。それに伴って例外の仕様を変更した