Предупреждение: я никогда не использовал государственную монаду Scala.Тем не менее, я думаю, что вижу причину, по которой вы ведете себя так, как вы говорите.
onSubmit
видит старый pass
, а не тот, я put
'ting
Хорошо, посмотрите на то, что вы делаете:
... { pass =>
... SHtml.password(pass, _ => put(pass))
... User.logIn("username", pass)
}
Во-первых, я не думаю, что вы ставите то, что, как вы думаете, вы вкладываете.Попробуйте вместо этого:
... SHTML.password(pass, newPass => put(newPass))
Во-вторых, я не думаю, что вы получаете то, что, как вы думаете, вы получаете.Я понятия не имею, как работает монада состояний Scalaz, но она должна быть что-то примерно так:
... User.logIn("username", get())
Я не думаю, что вы используете pass
для обозначения изменяющегося состояния;pass
- это просто значение, которое дается для начального вычисления состояния, что объясняет, почему User.logIn("username", pass)
использует «старый» oassword.
Также (хотя я не знаю SHtml
или что &
делает) Я очень сомневаюсь, что это на самом деле будет работать.Трудно объяснить, почему я так думаю, но это как-то связано с тем, что SHtml
, вероятно, не дружит с созданием выражений состояний внутри себя, как прокомментировал Дебилски.SHtml.password
кажется, ожидают , что вы дадите ему произвольную побочную функцию;этот выбор дизайна сразу делает его неприемлемым для функционального подхода к тому, что вы пытаетесь сделать.