Arcからの挑戦を見たら言語を作りたくなった件

Arcからの挑戦が面白い。

次のようなプログラムを書け。
URL said (例えば http://localhost:port/said )は、入力フィールドひとつと、送信ボタンひとつのページを生成する。
送信ボタンが押されたら、2番めのページとして、"click here." と書かれたリンクひとつのページを生成する。
それがクリックされたら、3番めのページとして、"you said: ..." と書かれたページにいく。
ここで ... は、さっきの入力フィールドにユーザがタイプしたものだ。
ただし、3番めのページは、ユーザが実際にタイプしたものだけを表示すること。
つまり、入力フィールドの値を URL で渡してはいけない。そうしないと、最後のページの動作をURLで変えるようなことができてしまう。

というお題に関してArcだと次のように書ける、とのこと。

(defop said req
  (aform [w/link (pr "you said: " (arg _ "foo"))
           (pr "click here")]
    (input "foo") 
    (submit)))

ね、パワフルでしょ? というお話。


うん、たしかに生のCGIを書いたりするのに比べるとすごく簡潔に書けてびっくり。


でもさあ、昔から思ってるんだけど、HTMLの画面遷移ってもう少し直感的に書けないものかなあ。たとえば上のお題の場合、次のように書ける言語がもしあったら便利だと思いません?

Start:
  input($msg)
  submit => Next

Next:
  link("click here") => Result

Result:
  "you said: " + $msg


ためしにRaccで作ってみようかな。それとも言語内DSLにするのが最近の流行りかな。