Play2.1のfunctionalパッケージとバリデーション #play_ja

blog書いたら反応があったので。 functionalについて、ユーザーが直接使うことをどのくらい想定して実装されたのか、その他Jsonのバリデーションやシリアライズ、デシリアライズのベストプラクティスというか、使い分けはよくわかってない(ドキュメント読もう)
1
Kenji Yoshida @xuwei_k

書いた http://t.co/h106Sabh "Play2.1のfunctional packageのApplicativeを使う" #play_ja

2013-02-17 18:48:34
ssmylh @ssmylh

おぉ、Play にも Applicative Builder 相当のものがあるのか。> RT

2013-02-17 19:37:44
病気の美少女 @lyrical_logical

Play は web framework のはずなのになあ。ほんとに API に対する意識低い…それともわかった上で public にしてるのかなあ…

2013-02-17 19:40:24
Toshiyuki Takahashi @tototoshi

@lyrical_logical APIの意識はほんとに低いですね。ちょっとひくくらい。

2013-02-17 19:41:39
病気の美少女 @lyrical_logical

@tototoshi あとで整理するもーんみたいな感じなんですかね…

2013-02-17 19:43:27
Toshiyuki Takahashi @tototoshi

まあ人の勝手だけどPlayに一応バリデーションの仕組みあるのでApplicativeとか持ち出す前にそっち検討しましょうね。。。

2013-02-17 19:58:44
ssmylh @ssmylh

Option の Applicative のインスタンスはこれ https://t.co/psg58Z2o かな。

2013-02-17 19:59:23
Toshiyuki Takahashi @tototoshi

play-json4sでもJsErrorみたいなの作んなきゃだなあ

2013-02-17 20:01:40
ssmylh @ssmylh

これだとしたら、apply の実装が flatMap で実装されてるのはなんとなく違和感を感じるなぁ。

2013-02-17 20:03:05
Kenji Yoshida @xuwei_k

.@tototoshi まぁ多分内部でJsonのバリデーションの仕組み実装するのに不便だったから作ったんじゃないですかね・・・ https://t.co/lePhHWCM JsResultがapplicativeかつalternativeになってるわけで

2013-02-17 20:04:37
Toshiyuki Takahashi @tototoshi

@xuwei_k そのapplicativeとかをフレームワークのユーザーに使って欲しいのか欲しくないのかはっきりして欲しいですね。ドキュメントにあるのかなあ。

2013-02-17 20:06:12
ssmylh @ssmylh

bind が flatMap で実装されるのは普通だと思うのだけど、apply は あくまでそこまでの力というか、なんというか flatMap 未満の力というか、そういうのでやって欲しい感じがする。まぁ、いいのかな。

2013-02-17 20:08:46
Kenji Yoshida @xuwei_k

.@tototoshi (ドキュメントにはないと思います)って言おうとして探したら、普通にあった http://t.co/AZka4GPs

2013-02-17 20:09:10
Toshiyuki Takahashi @tototoshi

@xuwei_k ほんとだ。validateを基本使うもんだと思ってましたが。

2013-02-17 20:14:28
Kenji Yoshida @xuwei_k

@tototoshi いや、Reads とか Writes とか Format のtypeclassのインスタンスを明示的に実装する場合の説明っぽい?長くてちゃんと読んでないから、デフォルトで用意されている仕組みだけで足りる場合は使わないのかもしれないけど・・・

2013-02-17 20:18:27
Toshiyuki Takahashi @tototoshi

JsErrorみたいなの作ろうかと思ったけどjson4sの場合一回case classにしてそれに対するバリデーションをかけるわけだから微妙に違うな。

2013-02-17 20:29:33
Toshiyuki Takahashi @tototoshi

Playの場合は、Formと同じくbindするときにバリデーションが入るのかな。あとでちゃんと見よう。

2013-02-17 20:30:33
Toshiyuki Takahashi @tototoshi

playは作ってる人のタイプがまちまちなのがマイナス方向に行ってるよなあ

2013-02-17 20:33:21
Kenji Yoshida @xuwei_k

(json4sにも、lift-jsonから受け継いだscalazモジュールが・・・) https://t.co/RD6y27rr

2013-02-17 20:33:55
Kenji Yoshida @xuwei_k

https://t.co/21FpIZs8 これに関しては他のWebフレームワークの経験があまりないのと、Scala自体やScalaのライブラリの変化の激しさに慣れ過ぎてて、全く感じなかったというか考えたことなかったけど、まぁたぶん自分の感覚がおかしい

2013-02-17 21:30:23
Kenji Yoshida @xuwei_k

PlayのJsResultはScalazのValidationとほぼ同一 → しかしエラーがNonEmptyListではなくSeq → なのでAlternativeのインスタンスが作れてしまう→ ついでにAlternative[Reads]も(たぶん必要ないのに)作ってしまってる

2013-02-17 21:36:02