コマンドライン引数パーザのインタフェース

getoptとかって言語(やライブラリ)によってかなり使い方が違っていて,いつも困る.しかも,どれも(慣れるまで)それなりに分かりにくくて,どう書くのがその言語 "らしい" のかよくわからないことが多い.特にOCamlのArg.parseは何故か副作用ばりばりでやりにくかった覚えがある.かといって,どうすればいいかと訊かれても特にいいアイデアはない.一通りのことができるようにしておくと,あれくらいになるのかな.Haskellのは使ったことが無いのでよくわからない(まず,getArgsの型がIO [String]でややこしい).
例えば,オプションを一先ず全てハッシュテーブルに放り込もうとすると,大体冗長な書き方になってしまう.Schemeなら(多分)マクロ書けばいいけど.
オプション毎に違う処理の仕方をしたい時はそれぞれにクロージャを指定できないと困るもんね.
書いてて思ったけど,RubyのoptparseとOCamlのArgが似てるような気がしてきた.クロージャ指定して副作用で何とかするっていう仕組みだ.しかし,OCamlのがRubyに似ててもおいしくないよな.


結局,一通りのことができる仕組みと,ハッシュテーブルか何かでごぼっと取れるユーティリティと,マクロがあればいいってことかな.
でもRubyのoptparseのOptionParser::Arguable#getoptsも使い勝手が悪かった気がする.やっぱり自分で作るしかないのか.