セカイノカタチスマートフォン用の表示で見るセカイノカタチ世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。*/麗しき、@ponkotuy氏の作ったhttp-client-wrapperを改造して、Stateモナドを利用してみました。使い勝手は、むしろ悪化した模様。(^^;元プログラムの解説記事はこちらです。qiita.comモチベーション元記事にもありますが、グローバルな変数をimplicitで引き渡すような設計となっていたので、これをなんとかしたいと思いました。session)という構造が見えたので、Stateパターンだなという直感が働き、実装してみたかったというのが一番の動機です。b)というパターンをモナドを使って数珠つなぎにしていく、設計パターンです。Scalaの標準ライブラリには装備されていないので、scalazを利用しました。scalazを使うのは、実は今回初めてで、ついにscalazデビューかと感慨深いです。(^^;;実装に際しては、横田さんのこちらのページを参考にしました(厳密にはscalazでは無いですけど)。PUTなどのメソッド分用意する感じになりました。核となる部分は、下記の部分で、Stateクラスのインスタンスを生成しています。Response)という型を持つことになります。地味に、初回はセッションがないので、case式にて場合分けして、2パターン書いています。しているところが残念なポイントです。ソースコードは、下記にあります。CLI.元のコードを9割型書き換えてしまった上に、使い勝手の向上もなく、まったく別物になってしまったため、プロジェクト名を変更しました。一応、当初の目的であった、グローバルなスコープを持つ変数や引き回しのためのimplicitを排除することはできました。処理側は、インスタンス変数を持たず(というかobject)、データ型としてのcaseクラスが値を持つだけになっています。モナドなので、forを使って処理を合成することもできます(そうしないとsessionを引き回せない)。「ちょっとした検証にREPLでHttpClientを使う」という当初の用途からは後退した気がしますが、取り急ぎこんな感じでやってみました。はてなブログProシステム開発の世界で15年の山の民による、世界のカタチを探求するブログ。(4)はてなブログをはじめよう!qtamakiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。