Scalaz日本語ドキュメント これは、scalazに関する日本語ドキュメントです。 ソースコードのリポジトリはこちらです。 https://github.com/xuwei-k/scalaz-docs 文章内のコードはmdocによって、コンパイル、実行されています。 ライセンスはCreative Common BY-NC-SAです。 Kenji Yoshida @xuwei-k
3ヶ月くらい前に、途中まで書きましたが ScalaでOperational Monad(未完成) あらためて続きをやってみたらできましたヤッタ-。 「できた」というのは、とりあえず fumieval さんの以下の記事のコード Freeモナドを超えた!?operationalモナドを使ってみよう を、Scalaに翻訳できたということです。 ポイントとしては 数日前ScalazにCoyoneda追加されてたので、それを使うようにした 前回liftFという関数がよくわからなくて詰まったが、一ヶ月前に追加されてた https://github.com/scalaz/scalaz/commit/da7867cecf36ac61 fumievalさんのコード中にでてくるProgramという型は、数日前Scalazに追加されてるFreeCと同じだった https://github.com/scalaz/
はじめに Scalazを導入するメリットを書いていきたいと思います。 今回は、モナドの有用性について書きたいと思います。 Scalazお試し REPLでScalazを動かすにはまず次のようなbuild.sbtファイルを作ります。 scalaVersion := "2.11.6" libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.1.1" initialCommands += "import scalaz._, Scalaz._" sbt consoleコマンドによりREPLでScalazが使えます。 モナドって何 モナドってなんだ??? 次の3つの法則(モナド則)を満たしていれば、それはモナドです。 (Monad[F].point(x)) >>= f == f x m >>= Monad[F].point == m (m >
This document provides an overview of Scalaz and functional programming concepts like Functor, Applicative, and Monad as they relate to the Option type in Scalaz. It discusses Option syntax, constructing Options, working with Options using fold, map, and other methods, and defines Option as an instance of Functor, Applicative, and Monoid. It also briefly touches on concepts like context bounds and
Tumblrから出戻ってきました。 8/4のLL DecadeのLT大会に出るのでぜひお越しください。 さて、モナってますか? scalazなどでよく出現する[({type F[X] = G[A,X]})#F]のようなコードですが、これが何を意味しているのか最近やっと理解できたので、久しぶりにScalaの事書きます。 この記事はhigher kinded type(高階型)を理解していることが前提です。 結論からいうと、型パラメータの部分適用を行うためのテクニックです。以下のサンプルコードはscalazを使ってます。 用語 まず、この記事で使う用語を定義します。 higher kinded type(高階型) 「いくつかの型パラメータを取る型コンストラクタ」のこと。 例えば、ListはList[Int]のように、「型パラメータをひとつ取る型」なので高階型。 Eitherは、Either[T
Tagged Typeとは?ある型と値は同じだけど違う型を持たせる いくつか実装がある 今回はScalaz 7.1.0-RC1のものについて Scalaz 7.0.xまでとは挙動が異なる shapelessにも存在する Scalaでの実現方法を考えたのがshapeless作者のMiles Sabinさん 7.0.xと同様のものがshapeless.tag、7.1.0-RC1と同様のものがshapeless.newtypeとして定義されている Tagged Typeとは?scala> import scalaz.Tag import scalaz.Tag scala> sealed trait Foo defined trait Foo scala> "Hello, Scalaz!" res0: String = Hello, Scalaz! scala> Tag[String, Foo](
まず、下記の10行程度のScalaコードをご覧ください sealed abstract class Foo[A, B] final case class X[A]() extends Foo[A, A] final case class Y[A, B](a: A, b: B) extends Foo[A, B] object Main { def hoge[F[_, _], A, B, C](foo: Foo[A, B], bar: F[A, C]): F[B, C] = foo match { case X() => bar case Y(a, b) => ??? // Yの場合のコードはどうでもいいので } } これは、コンパイルエラーになります(Scala2.11.1)。しかし、HaskellでGADTs使って同様のコード書くと、コンパイル通るらしいです。これの話をします。*1 Sc
下記で取り上げられているネタについてメモを残す。 Scala の Either についての考察 - scalaとか・・・ Scala勉強会第53回 (EitherやScalazのValidationについて) - Togetter Either と Scalaz Either は flatMap メソッドを持たないので for 式では使えない。for 式内で Right で処理を進めたいなら right メソッドで、Left で処理を進めたいなら left メソッドで *Projection を取得する必要がある。 def r(n: Int): Either[String, Int] = Right(n) for { x <- r(1).right; y <- r(x).right } yield x+y とはいえ、多くの場合 Right で処理を進めたい場合が多く、Left で処理を進め
独習 Scalaz これまでいくつのプログラミング言語が羊の衣を着た Lisp に喩えられただろうか? Java は馴染み親しんだ C++ のような文法に GC を持ち込んだ。それまで他にも GC を載せた言語はあったけども、現実的に C++ の代替となりうる言語に GC が載ったことは 1996年には画期的に思われた。やがて時は経ち、人々は自分でメモリ管理をしないことに慣れていった。JavaScript と Ruby の両言語もその第一級関数 (first-class function) やブロック構文を持つことから羊の衣を着た Lisp と呼ばれたことがある。S式の同図像性がマクロに適することから Lisp系の言語はまだ面白いと思う。 近年の言語はもう少し新しい関数型言語から概念を借りるようになってきた。型推論やパターンマッチングは ML にさかのぼることができると思う。時が経てば、人
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く