独習 Scalaz: 7日目

in

更新された html5版があるので、よろしくお願いします。

6日目は、for 構文をみて、Writer モナドと関数をモナドとして扱うリーダーモナドをみた。

Applicative Builder

実はリーダーモナドの話をしながらこっそり Applicative builder |@| を使った。2日目 に 7.0.0-M3 から新しく導入された ^(f1, f2) {...} スタイルを紹介したけど、関数などの 2つの型パラメータを取る型コンストラクタでうまく動作しないみたいことが分かった。

Scalaz のメーリングリストを見ると |@| は deprecate 状態から復活するらしいので、これからはこのスタイルを使おう:

scala> (3.some |@| 5.some) {_ + _}
res18: Option[Int] = Some(8)

独習 Scalaz: 6日目

in

更新された html5版があるので、よろしくお願いします。

昨日は、flatMap を導入する Monad 型クラスをみた。また、モナディックなチェインが値にコンテキストを与えることも確認した。OptionList も標準ライブラリに flatMap があるから、新しいコードというよりは今まであったものに対して視点を変えて見るという感じになった。あと、モナディックな演算をチェインする方法としての for 構文も確認した。

for 構文、再び

Haskell の do 記法と Scala の for 構文には微妙な違いがある。以下が do 表記の例:

foo = do
  x <- Just 3
  y <- Just "!"
  Just (show x ++ y)

独習 Scalaz: 5日目

in

更新された html5版があるので、よろしくお願いします。

4日目は Functor則などのモナドの規則をみて、ScalaCheck を用いて任意の型クラスの例を使って検証した。また、OptionMonoid として扱う3つの方法や foldMap などを行う Foldable もみた。

モナドがいっぱい

今日は Learn You a Haskell for Great Good の新しい章を始めることができる。

独習 Scalaz: 4日目

in

更新された html5版があるので、よろしくお願いします。

昨日は、カインドと型について考え、Tagged type を探検して、さまざまな型の 2項演算を抽象化する方法としての SemigroupMonoid をみてみた。

いくつかの感想や意見もいただいた。まず、kind 計算機だけど paulp さんから Option.type みたいにコンパニオン型を使ったらどうかと教えてもらった。更新したバージョンを使うとこう書ける:

scala> kind[Functor.type]
res1: String = Functor's kind is (* -> *) -> *. This is a type constructor that takes type constructor(s): a higher-kinded type.

Jason Zaugg さんにもコメントをもらった:

独習 Scalaz: 3日目

in

更新された html5版があるので、よろしくお願いします。

昨日map 演算子を加える Functor から始めて、Pointed[F].point や Applicative な ^(f1, f2) {_ :: _} 構文を使った多態的な関数 sequenceA にたどり着いた。

型を司るもの、カインド

Making Our Own Types and Typeclasses の節で昨日のうちにカバーしておくべきだったけどしなかったのはカインドと型の話だ。Scalaz の理解には関係無いだろうと思ってたけど、関係あるので、座って聞いて欲しい。

すごいHaskellたのしく学ぼう の原書 Learn You a Haskell For Great Good 曰く:

独習 Scalaz: 2日目

in

更新された html5版があるので、よろしくお願いします。

昨日すごいHaskellたのしく学ぼうの原書 Learn You a Haskell for Great Good を頼りに Equal などの Scalaz の型クラスを見てきた。

Functor

LYAHFGG:

And now, we're going to take a look at the Functor typeclass, which is basically for things that can be mapped over.

独習 Scalaz: 1日目

in

お世話になっております。更新された html5版があるので、よろしくお願いします。

これまでいくつのプログラミング言語が羊の衣を着た Lisp に喩えられただろうか? Java は馴染み親しんだ C++ のような文法に GC を持ち込んだ。それまで他にも GC を載せた言語はあったけども、現実的に C++ の代替となりうる言語に GC が載ったことは 1996年には画期的に思われた。やがて時は経ち、人々は自分でメモリ管理をしないことに慣れていった。JavaScript と Ruby の両言語もその第一級関数 (first-class function) やブロック構文を持つことから羊の衣を着た Lisp と呼ばれたことがある。S式の同図像性がマクロに適することから Lisp系の言語はまだ面白いと思う。

絵で見るモナド

John Wiegley さんの "Monads in Pictures" を翻訳しました。翻訳の公開は本人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。

2012年8月20日 John Wiegley 著
2012年8月21日 e.e d3si9n 訳

これはモナドのチュートリアルではないし、ここには数学用語も出てこない。本稿は、既にモナドを一応使えるぐらいには習った人を対象とする。視覚化することで、何のために何をやっているかが明らかになるはずだ。

関数

モナドに対する直感を得る一つの方法として関数からモナドへの抽象化をたどるというものがある。関数が何をやっているのかを簡単な絵で表してみよう。Haskell の関数の呼び出しの構文を上に、同じ演算を視覚化したものを下に置いた:

Scala で書く tetrix: 12日目

昨日はエージェントとプレーヤが対戦できように 2つのステージアクターを作った。より面白くするために相手にゴミブロックを送る攻撃機能も実装した。

不公平な強み

これまでの所エージェントはいかに多くのラインを消せるかということを念頭において調整されてきた。しかし昨日になって突然 2行以上を消さないと有効にならない攻撃機能が導入された。この情報を知っている人間サイドに不公平な強みができたことになる。何とかできないか少し見てみる。

まず、アクションで一度に消されたライン数を管理しよう:

case class GameState(blocks: Seq[Block], gridSize: (Int, Int),
Syndicate content