Scalaz日本語ドキュメント これは、scalazに関する日本語ドキュメントです。 ソースコードのリポジトリはこちらです。 https://github.com/xuwei-k/scalaz-docs 文章内のコードはmdocによって、コンパイル、実行されています。 ライセンスはCreative Common BY-NC-SAです。 Kenji Yoshida @xuwei-k
気が向いたら書く、と言っていた解説を書きます。 Operational Monadを使用した最初のversion0.2.0を出してから、色々機能追加したり試行錯誤したりして、結構変わっています。その辺りの試行錯誤や経緯も少し含めて、内部の実装や設計の説明を書きます。 https://github.com/xuwei-k/ghscala まず最初に、自分が作ったgithub API clientの中で、Operational Monad以外に使われているScalazの機能一覧を挙げてみます。このあたり知らない人は、まずこれらを勉強したほうがいいかも*1 Monad始めScalazの基本的なこと NaturalTransformation http://d.hatena.ne.jp/xuwei/20130912/1378984786 Scalaz独自のEither EitherT(Either
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
@markhibberd さんの Endo の話がわかりやすかったので、勝手に日本語の説明をつけたスライドを作りました もとのスライド http://mth.io/talks/patterns-in-types-ylj 日本語の説明つけたもの http://gist-slide.appspot.com/5607773/endo.md https://gist.github.com/5607773 あと、他にもスライド公開してたので、みんな読むといいよ Argonaut Purely-Functional Library Design in Scala Zippers, Comonads and Data Structures in Scala それと、scalaj-httpのRequestに関してこのパターン使えるなぁーと思ったので、作ってみた https://gist.github.co
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
immutableScalaでは基本的にオブジェクトは不変 不変性を壊さずに手続き型プログラミングを行う方法を紹介する ここではテトリスを題材にする テトリスのモデルtype Point = (Int, Int) type Piece = Vector[Point] type Field = Vector[Vector[Boolean]] case class Tetriz(field: Field, piece: Piece, position: Point) Lens不変オブジェクトの操作にはLensを使う object Point { def x: Lens[Point, Int] = Lens.firstLens def y: Lens[Point, Int] = Lens.secondLens } ScalazにはScala標準のデータ型に対する様々なLens定義されている Le
2-3フィンガーツリー(2-3 finger tree、または単にfinger tree)とは、列を表す永続データ構造の一種であり、償却定数時間で両端への追加・削除が可能であり、対数時間で連結・分割・挿入が可能である。また、分割演算を変更すると優先度付きキューや探索木などを実装できる。2006年にRalf HinzeとRoss Patersonが発表した[1][2]。 関数型プログラミング言語などで使われる。Haskellでは、containersパッケージ[3]に列に特化した実装のData.Sequence[4]が含まれ、列に限定しない汎用の実装もfingertreeパッケージ[5]として存在する。Scalaでは標準ライブラリには含まれていないが、scalaz[6]などのライブラリなどで実装されている。その他、様々なプログラミング言語で実装されている。 構造[編集] 2-3フィンガーツリ
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 で処理を進め
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く