WASHでのCookieの扱い

WIKIに簡単なパスワード認証の機能を付けようと思って、Cookieの使い方についていろいろ調べてみた。
そもそもサンプルコードがコンパイルできない(型エラー)のでとてもあやしいが。
型が合うように適当にサンプルを書き換えたソースがこれ。

module Main where
import WASH.CGI.CGI
import qualified WASH.CGI.Cookie as C

main :: IO ()
main = run $
  do usernameC <- C.initExpiring "username" 10 "guest"
     username  <- C.get usernameC
     case username of
       Just "guest" ->
           standardQuery "What's your name?" $
             p (do text "Hi there! What's your name?"
                   activate (helloCookie usernameC) textInputField empty)
       Just uname   -> hello uname

helloCookie nameC name =
    do C.set nameC name
       hello name
hello :: String -> CGI ()
hello name = standardQuery ("hello, "++name) $ text $ "Hello, "++name

C.initExpiringは、Cookieの名前と有効な時間(分)とCookieの内容を引数に取る。
まずブラウザのCookieを調べて、もし指定した名前と同じ名前のものがあれば、そのCookieへのハンドラを返す(この場合はusernameという名前のCookieが探される)。なければ、指定した内容(この場合はguest)でCookieが新たに作られ、そのハンドラが返される。
C.getは、initExpiringで返されたハンドラをもらって、その内容を返す関数である。

なのでこの場合、最初のアクセスの際にはユーザ名の入力を促され、それ以降10分間は、このページにアクセスするといきなりhelloと言われるはずである。でも、うまくいかない。


で、適当にアクセスしてブラウザのCookieを確認してみると、Cookieの名前が"u"で、内容が"P"になってる。そりゃあうまくいかんわ。名前がuなのはusernameの先頭だからだろうけど、内容がPってのはまるでわからん。いや、名前がuだけなのもわからんのだけど。
ちなみにこれと全く同じ事が、ラジオボタンを作るときに起こりました。ラジオボタンの識別子には、指定した文字列の先頭1文字が使われていたのです。

これはバグ?それとも俺の使い方が悪い?