モナドはメタファーではない

Scala界の関数型プログラミング一派を代表する論客の一人、@djspiewak が 2010年に書いた "Monads Are Not Metaphors" を翻訳しました。翻訳の公開は本人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。

2010年12月27日 Daniel Spiewak 著
2011年5月29日 e.e d3si9n 訳

僕は今、約束を破るところだ。およそ三年前、僕は絶対にモナドの記事だけは書かないと自分に約束した。既にモナドに関する記事は有り余っている。記事の数が多すぎてその多さだけで多くの人は混乱している。しかも全員がモナドに対して異なる扱い方をしているため、モナドの概念を初めて学ぼうとする者は、ブリトー、宇宙服、象、砂漠のベドウィン (訳注: アラブ系遊牧民) の共通項を探す努力をするハメになっている。

僕は、この混乱した喩え話のサーカスにわざわざもう一つ追加するようなことはしない。まず、どの喩え話も完全には正確では無い。どの喩えも全体像を伝えきれていないし、いくつかは重要な点に関して露骨に誤解を招くような内容になっている。メキシコ料理や宇宙(そら)に思いをはせることでは、絶対にモナドを理解することはできない。モナドを理解する唯一の見方は、それをありのままの姿、つまり数学的概念として見ることだ。

Vibrant Ink for IntelliJ IDEA

実戦での Scala: Cake パターンを用いた Dependency Injection (DI)

Akka の作者として益々注目を集めている Jonas Bonér さんが 2008年に書いた "Real-World Scala: Dependency Injection (DI)" を翻訳しました。翻訳の公開は本人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください

さて、実戦での Scala シリーズ第二弾の今回は、Scala を用いた Depenency Injection (DI) の実装をみていきたい。Scala は、備わっている言語機構だけを用いても何通りかの DI を実現できる非常に豊かでディープな言語だが、必要に応じて既存の Java DI フレームワークを使うこともできる。

Triental では、一つの戦略に落ち着くまで三つの異なる方法を試した。以下のように話を進めていく。まず、現行の DI の実現方法を詳しく説明した後で、試した他の方法も簡単にカバーする。

Cake パターンを用いる

私たちが用いている現行の戦略は、いわゆる Cake パターンに基づいている。このパターンは、Martin Odersky の論文 Scalable Component Abstractions において、Ordersky と彼のチームが Scala のコンパイラを構成した方法として最初に発表された。このパターンがどのようにして DI を実現するのかということを日本語で説明する事を試みるよりも、(私たちの実際に使っているコードに大まかに基づいた)愚直なサンプルコードをみてみよう。

Scala と Json で tweed を織る

次々とヤバいコードを紡ぎ出し NY Scala シーンの中心的存在であり続ける @n8han が二年前に書いた "Weaving tweed with Scala and Json" を翻訳しました。翻訳の公開は本人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。

命からがら逃げ出した僕は抽出子をありとあらゆる状況に適用するよう努めた。例えば、JavaScript インタプリタが理解できるお洒落な文字列、Json オブジェクトだ。抽出子を使えば case 構文でこのように処理することができる:

import dispatch.json.Js
val echo = Js("""{"acting": "無表情で前を見ている"}""")
object Echo extends Js { val acting = 'acting ? str }
echo match {
  case Echo.acting(hmm) => hmm
  case _ => "pshaw"
}

res0: String = 無表情で前を見ている

Symbol 'acting に対して ? を呼び出すことで抽出子が作成される。Symbol には ? メソッドはないが暗黙の変換でそれをもつオブジェクトに変換されている。

sbt-twt

simple-build-tool から twitter できれば面白くないか、と思って年越し中の別のコーディングからの休憩として twitter processor を作ってみました。機能的には全部 @n8han の dispatch 任せで、oauth とかもそのまま使えると思ったので、dispatch サンプルである dispatch-twine をフォークして作りました。基本的には、sbt 内から

> twt log

と書くことでツイートが読め、

> twt grep #scala

で検索、

> twt commit "tweet!"

でつぶやくという感じです。

IntelliJ IDEA のための Twilight

Scala をやりながら他の IDE も試しましたが、結局 TextMate に戻っています。
今回巷で話題の IntelliJ IDEA に便乗するにあたって、Twilight theme を作りました。

screenshot

Scala コレクションのアーキテクチャ

Martin Odersky さんと Lex Spoon さんの "The Architecture of Scala Collections" を EPFL Scala Team の許可を得て翻訳しました。
eed3si9n による非公式翻訳 (user-contributed work) なので、EPFL は一切関知しません。 翻訳の間違い等があれば遠慮なく Issues などで訳者の方にご指摘ください。

Scala 2.8 アクター API

コレクション API に引き続き、Philipp Haller さんと Stephen Tu さんの "Scala 2.8 Actors API" を EPFL Scala Team の許可を得て翻訳しました。
eed3si9n による非公式翻訳 (user-contributed work) なので、EPFL は一切関知しません。これも github でホストしてるので、質問・ご意見などは Issues にどうぞ。

型クラスによる XML データバインディング

Scala 2.8 コレクション API

Martin Odersky さんと Lex Spoon さんの "The Scala 2.8 Collections API" を EPFL Scala Team の許可を得て翻訳しました。
eed3si9n による非公式翻訳 (user-contributed work) なので、EPFL は一切関知しません。 翻訳の間違い等があれば遠慮なく Issues などで訳者の方にご指摘ください。

結構長いので、github に移行しました。http://eed3si9n.github.com/scala-collections-doc-ja/

Syndicate content