<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Learn Scala</title><link>https://learn-scala.polyvariant.org/</link><description>Recent content on Learn Scala</description><generator>Hugo</generator><language>en</language><atom:link href="https://learn-scala.polyvariant.org/index.xml" rel="self" type="application/rss+xml"/><item><title>Blogs &amp; channels</title><link>https://learn-scala.polyvariant.org/blogs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn-scala.polyvariant.org/blogs/</guid><description>&lt;ul&gt;
&lt;li&gt;Softwaremill
&lt;ul&gt;
&lt;li&gt;Scala Times newsletter &lt;a href="https://scalatimes.com/" class="external-link" target="_blank" rel="noopener"&gt;https://scalatimes.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Blog &lt;a href="https://softwaremill.com/blog/" class="external-link" target="_blank" rel="noopener"&gt;https://softwaremill.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Petr Zapletal
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://petr-zapletal.medium.com/" class="external-link" target="_blank" rel="noopener"&gt;https://petr-zapletal.medium.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Salar Rahmanian
&lt;ul&gt;
&lt;li&gt;Scala news &lt;a href="https://www.scalanews.net/" class="external-link" target="_blank" rel="noopener"&gt;https://www.scalanews.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Daniel Ciocîrlan
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@rockthejvm/videos" class="external-link" target="_blank" rel="noopener"&gt;https://www.youtube.com/@rockthejvm/videos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.rockthejvm.com/" class="external-link" target="_blank" rel="noopener"&gt;https://blog.rockthejvm.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Jakub Kozłowski
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@kubukoz/videos" class="external-link" target="_blank" rel="noopener"&gt;https://www.youtube.com/@kubukoz/videos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.kubukoz.com/" class="external-link" target="_blank" rel="noopener"&gt;https://blog.kubukoz.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dev inside you
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@DevInsideYou/videos" class="external-link" target="_blank" rel="noopener"&gt;https://www.youtube.com/@DevInsideYou/videos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devinsideyou.com/" class="external-link" target="_blank" rel="noopener"&gt;https://devinsideyou.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Li Haoyi
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.lihaoyi.com/" class="external-link" target="_blank" rel="noopener"&gt;https://www.lihaoyi.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Michał Pawlik
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.michalp.net/" class="external-link" target="_blank" rel="noopener"&gt;https://blog.michalp.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Language aspects</title><link>https://learn-scala.polyvariant.org/language-aspects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn-scala.polyvariant.org/language-aspects/</guid><description>&lt;h3 id="type-system-hierarchy"&gt;
 Type system hierarchy
 &lt;a class="heading-link" href="#type-system-hierarchy"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/tour/unified-types.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/tour/unified-types.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.artima.com/scalazine/articles/scalas_type_system.html" class="external-link" target="_blank" rel="noopener"&gt;https://www.artima.com/scalazine/articles/scalas_type_system.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="case-classes"&gt;
 Case classes
 &lt;a class="heading-link" href="#case-classes"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/tour/case-classes.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/tour/case-classes.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/overviews/scala-book/case-classes.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/overviews/scala-book/case-classes.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="traits"&gt;
 Traits
 &lt;a class="heading-link" href="#traits"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/tour/traits.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/tour/traits.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/overviews/scala-book/traits-interfaces.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/overviews/scala-book/traits-interfaces.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="pattern-matching"&gt;
 Pattern matching
 &lt;a class="heading-link" href="#pattern-matching"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/tour/pattern-matching.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/tour/pattern-matching.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://alvinalexander.com/scala/how-to-use-pattern-matching-scala-match-case-expressions/" class="external-link" target="_blank" rel="noopener"&gt;https://alvinalexander.com/scala/how-to-use-pattern-matching-scala-match-case-expressions/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://data-flair.training/blogs/scala-pattern-matching/" class="external-link" target="_blank" rel="noopener"&gt;https://data-flair.training/blogs/scala-pattern-matching/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="option-and-either"&gt;
 Option and Either
 &lt;a class="heading-link" href="#option-and-either"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://xebia.com/blog/try-option-or-either/" class="external-link" target="_blank" rel="noopener"&gt;https://xebia.com/blog/try-option-or-either/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://alvinalexander.com/scala/best-practice-eliminate-null-values-from-code-scala-idioms/" class="external-link" target="_blank" rel="noopener"&gt;https://alvinalexander.com/scala/best-practice-eliminate-null-values-from-code-scala-idioms/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://danielwestheide.com/blog/the-neophytes-guide-to-scala-part-7-the-either-type/" class="external-link" target="_blank" rel="noopener"&gt;https://danielwestheide.com/blog/the-neophytes-guide-to-scala-part-7-the-either-type/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="collections-for-comprehension"&gt;
 Collections, for comprehension
 &lt;a class="heading-link" href="#collections-for-comprehension"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/overviews/scala-book/collections-101.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/overviews/scala-book/collections-101.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/tour/for-comprehensions.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/tour/for-comprehensions.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="implicits"&gt;
 Implicits
 &lt;a class="heading-link" href="#implicits"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.artima.com/pins1ed/implicit-conversions-and-parameters.html" class="external-link" target="_blank" rel="noopener"&gt;https://www.artima.com/pins1ed/implicit-conversions-and-parameters.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.lihaoyi.com/post/ImplicitDesignPatternsinScala.html" class="external-link" target="_blank" rel="noopener"&gt;https://www.lihaoyi.com/post/ImplicitDesignPatternsinScala.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scala-fmi.github.io/scala-fmi-2019/lectures/08-implicits.html" class="external-link" target="_blank" rel="noopener"&gt;https://scala-fmi.github.io/scala-fmi-2019/lectures/08-implicits.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apiumhub.com/tech-blog-barcelona/scala-implicits/" class="external-link" target="_blank" rel="noopener"&gt;https://apiumhub.com/tech-blog-barcelona/scala-implicits/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="future---asynchronous-and-parallel-operations"&gt;
 Future - asynchronous and parallel operations
 &lt;a class="heading-link" href="#future---asynchronous-and-parallel-operations"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/overviews/scala-book/futures.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/overviews/scala-book/futures.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.scala-lang.org/overviews/core/futures.html" class="external-link" target="_blank" rel="noopener"&gt;https://docs.scala-lang.org/overviews/core/futures.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://danielwestheide.com/blog/the-neophytes-guide-to-scala-part-8-welcome-to-the-future/" class="external-link" target="_blank" rel="noopener"&gt;https://danielwestheide.com/blog/the-neophytes-guide-to-scala-part-8-welcome-to-the-future/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Libraries</title><link>https://learn-scala.polyvariant.org/libraries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn-scala.polyvariant.org/libraries/</guid><description>&lt;h3 id="databases"&gt;
 Databases
 &lt;a class="heading-link" href="#databases"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="slick"&gt;
 Slick
 &lt;a class="heading-link" href="#slick"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://scala-slick.org/doc/3.3.1/introduction.html" class="external-link" target="_blank" rel="noopener"&gt;https://scala-slick.org/doc/3.3.1/introduction.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://books.underscore.io/essential-slick/essential-slick-3.html" class="external-link" target="_blank" rel="noopener"&gt;https://books.underscore.io/essential-slick/essential-slick-3.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="doobie"&gt;
 Doobie
 &lt;a class="heading-link" href="#doobie"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tpolecat.github.io/doobie/" class="external-link" target="_blank" rel="noopener"&gt;https://tpolecat.github.io/doobie/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="quill"&gt;
 Quill
 &lt;a class="heading-link" href="#quill"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://getquill.io/" class="external-link" target="_blank" rel="noopener"&gt;https://getquill.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zio.dev/zio-quill/" class="external-link" target="_blank" rel="noopener"&gt;https://zio.dev/zio-quill/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zio/zio-protoquill" class="external-link" target="_blank" rel="noopener"&gt;https://github.com/zio/zio-protoquill&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="working-with-json"&gt;
 Working with Json
 &lt;a class="heading-link" href="#working-with-json"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="circe"&gt;
 Circe
 &lt;a class="heading-link" href="#circe"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://circe.github.io/circe/" class="external-link" target="_blank" rel="noopener"&gt;https://circe.github.io/circe/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="jsoniter-scala"&gt;
 Jsoniter Scala
 &lt;a class="heading-link" href="#jsoniter-scala"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/plokhotnyuk/jsoniter-scala" class="external-link" target="_blank" rel="noopener"&gt;https://github.com/plokhotnyuk/jsoniter-scala&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.lambdaspot.dev/the-fastest-and-safest-json-parser-and-serializer-for-scala" class="external-link" target="_blank" rel="noopener"&gt;https://blog.lambdaspot.dev/the-fastest-and-safest-json-parser-and-serializer-for-scala&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="io"&gt;
 IO
 &lt;a class="heading-link" href="#io"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://typelevel.org/cats-effect/datatypes/io.html" class="external-link" target="_blank" rel="noopener"&gt;https://typelevel.org/cats-effect/datatypes/io.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typelevel.org/blog/2017/05/02/io-monad-for-cats.html" class="external-link" target="_blank" rel="noopener"&gt;https://typelevel.org/blog/2017/05/02/io-monad-for-cats.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/walmartlabs/understanding-io-monad-in-scala-b495ca572174" class="external-link" target="_blank" rel="noopener"&gt;https://medium.com/walmartlabs/understanding-io-monad-in-scala-b495ca572174&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="zio"&gt;
 ZIO
 &lt;a class="heading-link" href="#zio"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zio.dev/" class="external-link" target="_blank" rel="noopener"&gt;https://zio.dev/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="monix"&gt;
 Monix
 &lt;a class="heading-link" href="#monix"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://monix.io/" class="external-link" target="_blank" rel="noopener"&gt;https://monix.io/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="messaging"&gt;
 Messaging
 &lt;a class="heading-link" href="#messaging"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="pass4s"&gt;
 pass4s
 &lt;a class="heading-link" href="#pass4s"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ocadotechnology.github.io/pass4s/" class="external-link" target="_blank" rel="noopener"&gt;https://ocadotechnology.github.io/pass4s/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.michalp.net/posts/scala/pass4s-basics/" class="external-link" target="_blank" rel="noopener"&gt;https://blog.michalp.net/posts/scala/pass4s-basics/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="type-classes"&gt;
 Type classes
 &lt;a class="heading-link" href="#type-classes"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tpolecat.github.io/2013/10/12/typeclass.html" class="external-link" target="_blank" rel="noopener"&gt;https://tpolecat.github.io/2013/10/12/typeclass.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scalac.io/typeclasses-in-scala/" class="external-link" target="_blank" rel="noopener"&gt;https://scalac.io/typeclasses-in-scala/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.scala-exercises.org/scala_tutorial/type_classes" class="external-link" target="_blank" rel="noopener"&gt;https://www.scala-exercises.org/scala_tutorial/type_classes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cats"&gt;
 Cats
 &lt;a class="heading-link" href="#cats"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://underscore.io/books/scala-with-cats/" class="external-link" target="_blank" rel="noopener"&gt;https://underscore.io/books/scala-with-cats/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typelevel.org/cats/" class="external-link" target="_blank" rel="noopener"&gt;https://typelevel.org/cats/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.scala-exercises.org/cats/semigroup" class="external-link" target="_blank" rel="noopener"&gt;https://www.scala-exercises.org/cats/semigroup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="higher-kinded-types"&gt;
 Higher-kinded types
 &lt;a class="heading-link" href="#higher-kinded-types"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/bigpanda-engineering/understanding-f-in-scala-4bec5996761f" class="external-link" target="_blank" rel="noopener"&gt;https://medium.com/bigpanda-engineering/understanding-f-in-scala-4bec5996761f&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dzone.com/articles/scalafp-the-mystery-of-scalas-higher-kinded-types" class="external-link" target="_blank" rel="noopener"&gt;https://dzone.com/articles/scalafp-the-mystery-of-scalas-higher-kinded-types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.stephanboyer.com/post/115/higher-rank-and-higher-kinded-types" class="external-link" target="_blank" rel="noopener"&gt;https://www.stephanboyer.com/post/115/higher-rank-and-higher-kinded-types&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tagless-final"&gt;
 Tagless final
 &lt;a class="heading-link" href="#tagless-final"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.rockthejvm.com/tagless-final/" class="external-link" target="_blank" rel="noopener"&gt;https://blog.rockthejvm.com/tagless-final/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.softwaremill.com/final-tagless-seen-alive-79a8d884691d" class="external-link" target="_blank" rel="noopener"&gt;https://blog.softwaremill.com/final-tagless-seen-alive-79a8d884691d&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.softwaremill.com/bake-your-bread-tagless-final-style-dea9448b3dc3" class="external-link" target="_blank" rel="noopener"&gt;https://blog.softwaremill.com/bake-your-bread-tagless-final-style-dea9448b3dc3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.basementcrowd.com/2019/01/17/an-introduction-to-tagless-final-in-scala/" class="external-link" target="_blank" rel="noopener"&gt;https://www.basementcrowd.com/2019/01/17/an-introduction-to-tagless-final-in-scala/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scalac.io/tagless-final-pattern-for-scala-code/" class="external-link" target="_blank" rel="noopener"&gt;https://scalac.io/tagless-final-pattern-for-scala-code/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fp-in-general"&gt;
 FP in general
 &lt;a class="heading-link" href="#fp-in-general"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mmenestret/fp-resources" class="external-link" target="_blank" rel="noopener"&gt;https://github.com/mmenestret/fp-resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html" class="external-link" target="_blank" rel="noopener"&gt;http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="streaming"&gt;
 Streaming
 &lt;a class="heading-link" href="#streaming"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="fs2"&gt;
 FS2
 &lt;a class="heading-link" href="#fs2"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fs2.io/" class="external-link" target="_blank" rel="noopener"&gt;https://fs2.io/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="oauth2"&gt;
 OAuth2
 &lt;a class="heading-link" href="#oauth2"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="sttp-oauth2"&gt;
 sttp-oauth2
 &lt;a class="heading-link" href="#sttp-oauth2"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ocadotechnology.github.io/sttp-oauth2/" class="external-link" target="_blank" rel="noopener"&gt;https://ocadotechnology.github.io/sttp-oauth2/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.michalp.net/posts/scala/oauth2-app-p1/" class="external-link" target="_blank" rel="noopener"&gt;https://blog.michalp.net/posts/scala/oauth2-app-p1/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Trainings &amp; books</title><link>https://learn-scala.polyvariant.org/general/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn-scala.polyvariant.org/general/</guid><description>&lt;ul&gt;
&lt;li&gt;Scala Exercises &lt;a href="https://www.scala-exercises.org/scala_tutorial/terms_and_types" class="external-link" target="_blank" rel="noopener"&gt;https://www.scala-exercises.org/scala_tutorial/terms_and_types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scala at Light Speed &lt;a href="https://www.youtube.com/watch?v=-8V6bMjThNo&amp;amp;list=PLmtsMNDRU0BxryRX4wiwrTZ661xcp6VPM" class="external-link" target="_blank" rel="noopener"&gt;https://www.youtube.com/watch?v=-8V6bMjThNo&amp;list=PLmtsMNDRU0BxryRX4wiwrTZ661xcp6VPM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Foundations of Functional Programming in Scala &lt;a href="https://www.youtube.com/watch?v=OdPaWmRnAc4&amp;amp;list=PLiYD0LWExCDkXGpYRY3WjNscDfhe4D0ND" class="external-link" target="_blank" rel="noopener"&gt;https://www.youtube.com/watch?v=OdPaWmRnAc4&amp;list=PLiYD0LWExCDkXGpYRY3WjNscDfhe4D0ND&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Functional Programming Strategies in Scala with Cats by Noel Welsh &lt;a href="https://www.scalawithcats.com/dist/scala-with-cats.html" class="external-link" target="_blank" rel="noopener"&gt;https://www.scalawithcats.com/dist/scala-with-cats.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Practical FP in Scala by Gabriel Volpe (free / pay any price) &lt;a href="https://leanpub.com/pfp-scala" class="external-link" target="_blank" rel="noopener"&gt;https://leanpub.com/pfp-scala&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Functional Programming in Scala by Martin Odersky &lt;a href="https://www.coursera.org/learn/progfun1" class="external-link" target="_blank" rel="noopener"&gt;https://www.coursera.org/learn/progfun1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Strategic Scala Style: Principle of Least Power by Li Haoi &lt;a href="https://www.lihaoyi.com/post/StrategicScalaStylePrincipleofLeastPower.html" class="external-link" target="_blank" rel="noopener"&gt;https://www.lihaoyi.com/post/StrategicScalaStylePrincipleofLeastPower.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Functional Stream Processing in Scala by Zainab Ali &lt;a href="https://pureasync.gumroad.com/l/functional-stream-processing-in-scala" class="external-link" target="_blank" rel="noopener"&gt;https://pureasync.gumroad.com/l/functional-stream-processing-in-scala&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn Scala 3, Functional Programming and ZIO 2 by Alvin Alexander &lt;a href="https://www.learnscala.dev/" class="external-link" target="_blank" rel="noopener"&gt;https://www.learnscala.dev/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Paid:&lt;/p&gt;</description></item></channel></rss>