Scala

Foldable and Traverse

今日も今日とてScala with Catsを読む。 この章ではコレクションに対するイテレーションの2つの型クラスについて見ていく。 Foldable foldLeftやfoldRightの操作を抽象化したもの Traverse Applicativeを使ってfoldingよりも少ない手間でイテレートを行う高…

Semigroupal and Applicative

今日も今日とてScala with Catsを読んでいく。 Semigroupal and Applicative Semigroupal コンテキストのペアを構成する概念を内包する CatsはSemigroupalとFunctorを利用して、複数の引数を持つ関数のシーケンスを可能にするcats.syntax.applyモジュールを…

Monda Transformers

引き続き、Scala with Catsを読んでいく。 Monad Transformers Monadはネスト化されたfor-comprehensionsによってコードを肥大化させる可能性がある。 Exercise: Composing Monads M1, M2というモナドを合成したComposed[A]という型のflatMapを実装できるか…

Monads

Scala with Catsを読んでいく What is a Monad? ざっくり言うと、MonadはコンストラクタとflatMapメソッドを持つもの。 Option[A] flatMap (A => Option[B]) => Option[B] すべてのMonadはFunctorでもある。 ※ flatMapとmapメソッドを持っていれば、for-comp…

Functors

引き続き、Scala with Catsを読んでいく。 Functors Functorとはざっくり言うと、map メソッドを持ったものと言える。 通常、Listsの反復処理でmapメソッドに出会うが、Functorを理解するには別の視点で考える必要がある。 「Listsを走査する」と考えるので…

Monoids and Semigroups

お久しぶりです。一週間ちょっと前にコロナに感染してから常に身体が怠くて頭も重いから仕事でもプライベートでも何もやる気になりません。 ただ、このままずっとベッドの上で寝ていても良くないので、Scala with Catsを読み始めました。 www.scalawithcats.…

M1 Mac(arm64)環境でsbt-protocがエラーになる

M1 Mac(arm64)でプロジェクトの環境構築をしているとsbt-protocでエラーが出たので、調べた内容と解決方法を残しておこうと思います。 前提 MacBook Pro(arm64) sbt v1.6.1 sbt-protoc v1.0.2 原因 protobufが 3.17.3 以前のバージョンではM1 Mac向けのbinar…

Circeでエンコード時にnullではなくフィールドごと削除する方法

Circeのエンコードでちょっとハマって時間を溶かしたので備忘録として書いておきます。 やりたいこと あるクラスにOption型のフィールドが含まれていて、そのフィールドが存在しない(Noneである)場合はエンコード時にそのフィールドをnullではなくフィールド…

Circeでエンコードされたオブジェクトの値を抽出するには?

Circeを使ってあるオブジェクトをエンコードした際に、正常にエンコードされたかどうか値を確認したいときがあります。 そのオブジェクトが複数のオブジェクトのリストを抱えている場合、どうやって確認すればよいのか少し詰まったので備忘録として残してお…