formlets HTMLのフォームを抽象化する試み

こういうフォームで、日付入力ボックスを、部品として抽象化できたらいいよねという話。
入力が01〜12月の範囲かチェックとか、生のクエリデータを意識しないですむように日付型の値を返すとかを、再利用できるはずだから。

名前 [ Gemma ]
到着 [09] / [22]
出発 [09] / [23]
[送信]


こうなるらしい。論文から抜粋。

let date formlet : date formlet = formlet
   <div>
      Month: {input int ⇒ month}
      Day: {input int ⇒ day}
   </div>
yields make date month day
                                                       
let travel formlet : (string × date × date) formlet =
   formlet
      <#>
        Name: {input ⇒ name}
        <div>
           Arrive: {date formlet ⇒ arrive}
           Depart: {date formlet ⇒ depart}
        </div>
        {submit "Submit"}
      </#>
   yields (name, arrive, depart)
                                                       
let display itinerary : (string × date × date) → xml =
   fun (name, arrive, depart) →
      <html>
        <head><title>Itinerary</title></head>
        <body>
           Itinerary for: {xml text name}
           Arriving: {xml of date arrive}
           Departing: {xml of date depart}
        </body>
      </html>

handle travel formlet display itinerary

自分用メモ

scanfに似ていると思った。

function scanf_date(msg) {
 printf("%s",msg);
 scanf("%d/%d",month,day);
 return new Date(month,day);
}

function main() {
  var name, arrive, depart;
  printf("名前");
  scanf("%s", name);
  arrive = scanf_date("到着");
  depart = scanf_date("出発");
}

さて、これだと3回入力待ちループになるわけだ。
こいつをどうにかしてこういう動作に解釈できないか?

printf("名前 到着 出発");
scanf("%s %d/%d %d/%d",name, month0, day0, month1, day1);
  • month0、month1と、変数名のつけかえが必要になった。
  • さらに、scanf_dateの動作を加えて・・・
printf("名前 到着 出発");
scanf("%s %{date} %{date}",name, arrive, depart);
      • -
  • もう3ページ遷移すればいいよ(バカ
名前 [ Gemma ]
[送信]
到着 [09] / [23]
[送信]
出発 [09] / [25]
[送信]