この記事は Monad がわかる人に向けた MonadTransformer の解説記事です。
すごいH本や FP in Scala などでモナドまではイメージが掴めたけれど、モナドトランスフォーマーが何かわからない、という層をターゲットに想定しています。
基本的に Functor
, Applicative
, Monad
および型クラスについては把握しているものとしますので、この辺があやふやな方は別の資料などをご参照下さい。
trait EnumLike { | |
type Value | |
def value: Value | |
} | |
trait StringEnumLike extends EnumLike { | |
type Value = String | |
} |
この記事は Play framework Advent Calendar 2014 の7日目です。
昨日は @dorako321 さんの Play framework Advent Calendar 2014 6日目 位置情報を使ってみよう でした。
明日は @nazoking さんの play2.3 の sbt-web を使わず node で代替システムを作るための資料 です。
さて、そんなこんなで公式ドキュメントではまだ語られていない ActionFunction とそのサブトレイトについて紹介したいと思います。 (公式ドキュメントにも記載ありました https://www.playframework.com/documentation/2.3.x/ScalaActionsComposition#Different-request-types )
Java8 の Stream API は Stream#collect
メソッドを使って様々な集約を行う事ができます。
java.util.stream.Collectors
で様々な Collector が提供されていますが、Collectors.collectingAndThen
のような合成が中心で同時に二つの集約を行うといった事が簡単にできません。
そのため、ラムダ禁止について本気出して考えてみた - 9つのパターンで見るStream API の「7. streamの外に結果を残す(禁止度:A)」で書かれている様な思わず禁止したくなっちゃう様なコードを書かざるを得ません。
// 引用: ラムダ禁止について本気出して考えてみた
// 7. streamの外に結果を残す(禁止度:A)
void averageAndSum1(List list) {
こちらのツイート https://twitter.com/matarillo/status/1302048512771645440 をみて foldMap か foldLeft で簡単に書けるのでは?と思ったのが発端
case class OrganizationRecord(
id: Long,
organizationLv1: String,
class Foo[+A]
class Bar[-A]
class Test1[A] {
def piyo(a: A): Unit = ??? // OK
def poyo(a: Foo[A]): Unit = ??? // OK
def puyo(a: Bar[A]): Unit = ??? // OK
def paya(): A = ??? // OK