リフトプロジェクトでscalazを使い始めようとしています。その目的のために、私はスタイルに合うようにいくつかのコードを書き直しています。ユーザーにログインするためのコードを考えてみましょう。
def login: CssSel = {
var password = ""
def submit() {
if (doLogin) S.redirectTo("/index")
else S.error("Wrong password")
}
"name=pwd" #> SHtml.password(password, password = _) &
"type=submit" #> SHtml.onSubmitUnit(submit)
}
したがって、これはどういうわけか状態モナドを使用して書き直す必要があります。しかし、私はどうやって得られないのですか。これを試してみてください:
val result = for {
s <- init[String]
pass <- SHtml.password(s, put(_))
newPass <- init[String]
res <- "name=pwd" #> pass &
"type=submit" #> SHtml.onSubmit { _ =>
if (User.logIn("username", newPass)) S.redirectTo("/index")
else S.error("Wrong password")
}
} yield (newPass, res)
result ! ""
UPD:回答によると、例を更新しました。
gets
、、などの使用方法を示す、scalazの状態モナドに関する優れたチュートリアル/説明はありput
ますか?