Ocsigen/Eliomで開発中 - パラメータの山!

Eliomで、とある講義の受講申し込みアプリを作っている。こういうのにありがちだが、リクエストパラメータはすぐに増えてしまう。このパラメータの山はなんとかならないか。
フォームを作る関数 get_form や post_form は、パラメータの個数分ネストされた対を受け取る関数を受け取る関数を渡さなければならない。これは型の不整合やパラメータ名の間違いを防ぐための仕組みだが,こうもパラメータが多いと順番を間違えてしまいそうだ。
ユーザ定義型でまとめる方法がないかもう少し調べてみようと思う。

コード(抜粋)

let entry_params =
    string "username" ** string "password" ** string "passwordDummy" 
	** string "kanjiFamilyName" ** string "kanjiPersonalName" 
	** string "furiFamilyName" ** string "furiPersonalName" ** int "age"
	** string "tel00" ** string "tel01" ** string "tel02" 
	** string "fax00" ** string "fax01" ** string "fax02" 
	** email "email" 
	** string "company" ** string "compCapital" ** string "numEmployee" 
	** string "department" ** string "position" ** string "job"
	** string "compPostal00" ** string "compPostal01" ** string "compAddress" 
	** int "numquest1" ** int "numquest2" ** int "numquest3" ** int "numquest4"
	** string "learnAbout" ** string "useExpFor" ** radio string "preface"
	** string "superiorKFName" ** string "superiorKPName" ** string "superiorFFName" ** string "superiorFPName" 
	** string "superiorDept" ** string "superiorPos" ** string "superiorMail" ** string "superiorMailDummy" 
	** string "course"


let entry = 
  new_post_service
    ~fallback:entry_nopost
    ~post_params:entry_params
    ()

(* リクエストパラメータの山=>引数の山! *)
let entryform ?exns sp =
  post_form' 
   ~sp:sp 
   ~service:entry 
   (fun 
	(username,(password,(passwordDummy,
	(kanjiFamilyName,(kanjiPersonalName,
	(furiFamilyName,(furiPersonalName,(age,
	(tel00,(tel01,(tel02,
	(fax00,(fax01,(fax02,
	(email,(company,(compCapital,(numEmployee,
	(department,(position,(job,(compPostal00,(compPostal01,(compAddress,
	(numquest1,(numquest2,(numquest3,(numquest4,
	(learnAbout,(useExpFor,(preface,
	(superiorKFName,(superiorKPName,(superiorFFName,(superiorFPName,
	(superiorDept,(superiorPos,(superiorMail,(superiorMailDummy,
	course))))))))))))))))))))))))))))))))))))))) -> Lwt.return (フォーム本体))