#Gauche でやる分には失敗は失敗オブジェクトを新しく型定義したほうが使い勝手は良いような気がします。
#うーん、値が無い場合に#fを返すってapiもそこそこあるんだよなあ。
##<undef>とかを使うように統一してればまた別だったかもしれないが
#ふむ、gappend :: [Generator a] -> Generator a で、gconcatenate :: Generator Generator a -> Generator a なんだが、Generator [a] -> Generator a ってのは無いんだな。
#いや、[a]->aをGenerator [a]にgmapすればいいのか。
#いや違う。[a]->aとか無いや。concatenateは[[a]]->[a]だ。
#てことはgflatten::Generator [a] -> Generator a とか作った方がいいってことか。