女子高生になりたいスマートフォン用の表示で見る女子高生になりたいはるみちゃんのブログだよ。この広告は、90日以上更新していないブログに表示しています。2018-06-24モナドトランスフォーマーを使ってモナドを合成するScalaネストしたモナドの取り扱いモナドがネストして帰ってくることがあります。DBに接続してユーザレコードを取り出す時、DBに接続できたかどうかを表すEither、該当のユーザがいたかどうかを表すOptionのモナドがネストして帰ってくるケースを考えてみます。//DBからUserをFetchこのfetchResultから、ユーザ情報にアクセスするためには、以下のようなコードを書く事になると思います。}}どっちもネストして嫌なコードになってしまいました。モナドAとモナドBを合成できれば、1つのflatMapだけで操作ができるようになるのですが、モナドは通常合成できません。いうのも、flatMapの実装ができないからです。}}ただし、M2モナドが確定すれば、合成することができます。M2がOptionだとしたら、以下のように合成できます。}と、いうわけで、内部のモナドを確定できればモナドの合成ができるらしいです。catsでは、EitherやOptionなどを内部のモナドとして合成できる便利なトランスフォーマーが定義されています。モナドトランスフォーマーを使ってモナドを合成、操作するcatsでは、OptionTやEitherT等の「T」をつけた型でもなどトランスフォーマーが提供されています。これを使ってListモナドとOptionモナドを合成する例を見てみます。y簡単に合成したモナドを取り扱う事ができるようになりました。次に、EitherとOptionの合成を見てみます。Option[User]]です。内部のモナドはOptionなので、OptionTを使えばよいのですが、Eitherの型が確定しません。//Eitherは2つ型パラメータを取るのに1つしか渡せないそこで、タイプエイリアスを使用してEItherの片方の型を確定させます。User]このようにモナドを合成することができます。3つ以上のモナドを合成する時も同様、タイプエイリアスを使って型パラメータを補完しながら合成していきます。モナドトランスフォーマはvalueメソッドを持っており、これを利用して合成されたモナドをアンパックすることができます。valueメソッドを呼び出す度、内部から順番に1つずつアンパックされていきます。second.valueモナドトランスフォーマーの利用は局所的な関数内でとどめておき、値をかえす時はvalueによりアンパックした状態にしておくのが良いかもしれません。(1)...Stateモナドについてざっくりと。»プロフィールid:sakata_harumiはるみちゃんのブログだよ。技術系の記事を書くよ。(6)作ったものとかボカロ曲をあててみたひきこもごも!QiitaClient茂こえたいぷスペーシー三宅電卓エロムビアンScamLoadingViewiOSAppIconMakeriTunesConnectScreenShotMakerはてなブログをはじめよう!sakata_harumiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。