サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Switch 2
halcat.org
Any は全ての型のスーパータイプ、Nothing は全ての型のサブタイプです。 A with B は A と B の交差型を作ります。 A <:< B は A が B のサブタイプであることを表します。 forSome は存在型を構成します。 否定型 この対応から論理における否定は次のようになります。
Extensible Effects in Scala Freer Monads, More Extensible Effects で紹介される Eff モナドを Scala を使って解説します。 Contents Free Monad Freer Monad Efficient Freer Eff Monad (Extensible Freer) Free Monad Free はパラメータに Functor のインスタンスを与えることでモナドになるデータ型です。 Functor の定義から見ていきましょう。 trait Functor[F[_]] { def map[A, B](fa: F[A])(f: A => B): F[B] } 計算コンテナ F に対して map という関数が定義されます。 map は F[A] の計算値 A に関数 A => B を適用し F[B] を得ます。
スタックレスScala Stackless Scala With Free Monadsを参考にTrampolineやそれを抽象化したFreeを紹介します。 Abstract Scalaコンパイラの末尾再帰除去は自分自身を呼び出すメソッドのみに限定されます。 今回はどのような再帰呼び出しでもスタックを消費しないようにする方法を紹介します。 Introduction Scalaでプログラムを書いてjava.lang.StackOverflowErrorに遭遇した経験があることでしょう。 def factorial(n: BigInt): BigInt = if (n <= 1) 1 else n * factorial(n - 1) scala> factorial(10000) java.lang.StackOverflowError at java.math.BigInteger.sub
Extensible Effects in Scala Freer Monads, More Extensible Effectsで紹介されるEffモナドをScalaを使って解説します。 View details » スタックレスScala Stackless Scala With Free Monadsを参考にTrampolineモナドやそれをより抽象化したFreeモナドを紹介します。 View details »
Deriving Lenses with Metaprogramming Java, Scala, Haskellを使用してLens導出を試み, 各言語のメタプログラミングを紹介していきます. ここで考えるLensは以下のようにgetterとsetterの組であるデータ型とします. public interface Lens<A, B> { public B get(A a); public A set(A a, B b); }
例val Zero = BigInt(0) val One = BigInt(1) lazy val factorial: BigInt => BigInt = { case Zero | One => One case n => n * factorial(n - 1) } scala> factorial(10000) java.lang.StackOverflowError at scala.math.BigInt$.maxCached(BigInt.scala:22) at scala.math.BigInt$.apply(BigInt.scala:39) at scala.math.BigInt$.int2bigInt(BigInt.scala:102) at $anonfun$factorial$1.apply(<console>:17) at $anonfun$factori
発表者よしださんしろう(halcat0x15a) Scala, Clojure, Haskellとか Scalaは2.5年くらい書いてます Scalazは1年くらい 大学生になりました 夏休みです apidoc build.sbt scalaVersion := "2.10.0-M6" resolvers += "Typesafe Snapshots" at "http://repo.typesafe.com/typesafe/snapshots/" libraryDependencies ++= Seq( "org.scalaz" %% "scalaz-core" % "7.0.0-M1" ) scalacOptions += "-feature" initialCommands in console := "import scalaz._, Scalaz._"
自己紹介よしだ さんしろう 高校生 Scala, Clojure, Python Twitter http://twitter.com/#!/halcat0x15a github http://github.com/halcat0x15a
このページを最初にブックマークしてみませんか?
『halcat.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く