Click here to load reader
Upload
shuya-tsukamoto
View
50
Download
2
Embed Size (px)
Citation preview
とりあえず使うScalaz2014/12/11
Shuya Tsukamoto
Basic info
Scalaz (Functional Programming) is hard.
MonadFunctor
Applicative
Category theory(圏論)
Lambda
Monoid
Applicative Builder
Semigroup
Scalaz is …
Scalaz is …
Scalaz is …Library!!!
How to use with REPLwget http://repo1.maven.org/maven2/org/scalaz/scalaz-core_2.11/7.1.0/scalaz-core_2.11-7.1.0.jar !scala -cp scalaz-core_2.11-7.1.0.jar !scala> import scalaz.Scalaz._ import scalaz.Scalaz._ !scala> val someString = "abc".some someString: Option[String] = Some(abc) !scala>
How to use with SBT
libraryDependencies += "org.scalaz" % "scalaz-core_2.11" % "7.1.0"
Simple functions
Option extension• .option, .some, none[T]import scalaz.Scalaz._ !object Main extends App { // pure scala val a = "abc".some println(a) // Some(abc) ! // scalaz val b = Some("abc") println(b) // Some(abc) }
Option extension• .option, .some, none[T]import scalaz.Scalaz._ !object Main extends App { // pure scala val a = "abc".some println(a) // Some(abc) ! // scalaz val b = Some("abc") println(b) // Some(abc) }
pipeline(chain style) readable
Option extensionimport scalaz.Scalaz._ !object Main extends App { val a = longChaingFunction1.longChaingFunction2 .longChaingFunction3.longChaingFunction4 .longChaingFunction5.some val b = Some(longChaingFunction1.longChaingFunction2 .longChaingFunction3.longChaingFunction4 .longChaingFunction5) }
DListimport scalaz.DList !object Main extends App { ! var dList = DList[String]() ! dList :+= "one" dList :+= "two" dList :+= "three" ! println(dList.toList) // List(one, two, three) }
Difference lists: a data structure for `O(1)` append on lists.
DList• ScalaのListとListBufferとScalazのDListで要素追加したときの速度http://tsukaby.com/tech_blog/archives/662
append O(1) !!!!
OMG!
Validation[+E, +A]import scalaz._ import scalaz.Scalaz._ !object Main extends App { // Left : Failure, Right(Correct!) : Success val result:Validation[String, Int] = getCurrentYear() ! result match { case Success(a) => println("Year:" + a) case Failure(e) => println("Error:" + e) } def getCurrentYear(): Validation[String, Int] = { 2014.success //"Can't get year.".failure } }
Validation[+E, +A]sealed abstract class Validation[+E, +A] extends Product with Serializable !final case class Success[A](a: A) extends Validation[Nothing, A] final case class Failure[E](e: E) extends Validation[E, Nothing]
!
※next step(ValidationNel, ApplicativeBuilder)
ImmutableArrayimport scalaz.ImmutableArray !object Main extends App { val mutableArr = Array(1, 2, 3) mutableArr.update(0, 999) println(mutableArr(0)) ! val immutableArr = ImmutableArray.fromArray(Array[Int](1, 2, 3)) // immutableArr.update // compile error println(immutableArr(0)) }