独習 Scalaz: 17日目

in

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

Daniel Steger for openphoto.net

昨日は計算結果をキャッシュする方法としての Memo と、可変性をカプセル化する方法としての ST をみた。今日は続いて IO をみてみよう。

IO モナド

論文の後半を読むかわりに Rúnar さん (@runarorama)Towards an Effect System in Scala, Part 2: IO Monad を読もう:

While ST gives us guarantees that mutable memory is never shared, it says nothing about reading/writing files, throwing exceptions, opening network sockets, database connections, etc.

独習 Scalaz: 16日目

in

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

昨日は関数のようなものを抽象化する方法としての Arrow、それから型クラスのメタインスタンスを提供する方法としての Unapply をみた。また、applicative の実験として並行合成をサポートする XProduct も実装した。

Memo

関数が純粋だからといってその計算量が安いとは限らない。例えば、全ての 8文字の ASCII 文字列の順列に対する SHA-1 ハッシュのリストを求めるとする。タブ文字を抜くと ASCII には 95 の表示可能な文字があるので、繰り上げて 100 とする。100 ^ 810 ^ 16 だ。たとえ秒間 1000 ハッシュ処理できたとしても 10 ^ 13 秒、つまり 316888年かかる。

独習 Scalaz: 15日目

in

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

Rodolfo Cartas for openphoto.net

14日目に Scalaz をハックし始めた。まず、Vector の型クラスインスタンスが import Scalaz._ に含まれるようにした。次に、<*>ap の中置記法に振り戻した。最後に、コンパイラが Applicative[({type λ[α]=Int})#λ] を見つけられるように A[α]A に展開する暗黙の変換子を追加した。

3つの pull request とも上流に取り込んでもらえた! 以下の方法で早速同期する:

$ git co scalaz-seven
$ git pull --rebase

一度落ち着いて僕らがいじった型クラスをみてみよう。

独習 Scalaz: 14日目

in

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

bman ojel for openphoto.net

昨日import scalaz._Scalaz._ が何をスコープに取り込むかをみて、アラカルト形式の import の話もした。instance や syntax がどのように構成されているのかを知ることは、実は次のステップへの準備段階で、本当にやりたいのは Scalaz をハックすることだ。

メーリングリスト

プロジェクトのハックを始める前に礼儀としてそのプロジェクトの Google Group に加入する。

git clone

$ git clone -b scalaz-seven git://github.com/scalaz/scalaz.git scalaz-seven

独習 Scalaz: 13日目

in

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

e.e d3si9n

昨日は、Jeremy Gibbons さんによる論文を 2本飛ばし読みしておりがみプログラミングと applicative な走査をみた。今日は何かを読む代わりに、Scalaz の使い方に焦点を当ててみる。

implicit のまとめ

Scalaz は implicit を使い倒している。ライブラリを使う側としても、拡張する側としても何がどこから来てるかという一般的な勘を作っていくのは大切だ。Scala の import と implicit を手早く復習しよう!

Scala では import は 2つの目的で使われる:
1. 値や型の名前をスコープに取り込むため。

独習 Scalaz: 12日目

in

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

reynaldo f. tamayo for openphoto.net

11日目には入れ子になった不変データ構造へのアクセスする方法を抽象化したものとしての Lens をみた。

今日は論文をいくつか飛ばし読みしてみよう。まずは Jeremy Gibbons さんの Origami programming だ。

Origami programming

Gibbons さん曰く:

In this chapter we will look at folds and unfolds as abstractions. In a precise technical sense, folds and unfolds are the natural patterns of computation over recursive datatypes; unfolds generate data structures and folds consume them.

foldLeft4日目Foldable を使ったときにみたけど、unfold って何だろう?

The dual of folding is unfolding. The Haskell standard List library defines the function unfoldr for generating lists.

Hoogle には以下の例がある:

Prelude Data.List> unfoldr (\b -> if b == 0 then Nothing else Just (b, b-1)) 10
[10,9,8,7,6,5,4,3,2,1]

独習 Scalaz: 11日目

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

Darren Hester for openphoto.net

昨日はコンフィギュレーションを抽象化する方法として Reader をみた後、モナド変換子を紹介した。

今日はレンズを見てみよう。色んな人がレンズの話をして盛り上がってきてるトピックだし、使われるシナリオもはっきりしてるみたいだ。

進め! 亀

今年の Scalathon で Seth Tisue さん (@SethTisue)shapeless の Lens の話をした。残念ながら僕は聞けなかったけど、使われている例は借りさせてもらう。

scala> case class Point(x: Double, y: Double)
defined class Point
 
scala> case class Color(r: Byte, g: Byte, b: Byte)
defined class Color
 
scala> case class Turtle(
         position: Point,
         heading: Double,
         color: Color)
 
scala> Turtle(Point(2.0, 3.0), 0.0,
         Color(255.toByte, 255.toByte, 255.toByte))
res0: Turtle = Turtle(Point(2.0,3.0),0.0,Color(-1,-1,-1))

独習 Scalaz: 10日目

in

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

9日目TreeLocZipper を使った不変データ構造の更新する方法をみた。また、IdIndexLength などの型クラスもみた。Learn You a Haskell for Great Good を終えてしまったので、今後は自分でトピックを考えなければいけない。

Scalaz 7 で何度も見て気になっている概念にモナド変換子というのがあるので、何なのかみてみる。幸いなことに、Haskell の良書でオンライン版も公開されている本がもう 1冊ある。

モナド変換子

Real World Haskell―実戦で学ぶ関数型言語プログラミング の原書の Real World Haskell 曰く:

独習 Scalaz: 9日目

in

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

8日目は、モナディック関数の joinfilterM、と foldLeftM をみて、安全な RPN 電卓を実装して、Kleisli を使ってモナディック関数を合成する方法をみた後で、独自のモナド Prob を実装した。

Tree

Learn You a Haskell for Great Good の最終章 Zippers を始めよう:

In this chapter, we'll see how we can take some data structure and focus on a part of it in a way that makes changing its elements easy and walking around it efficient.

独習 Scalaz: 8日目

in

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

7日目は、Applicative Builder をみて、あと State モナド、\/ モナド、Validation もみた。

便利なモナディック関数

Learn You a Haskell for Great Good 曰く:

In this section, we're going to explore a few functions that either operate on monadic values or return monadic values as their results (or both!). Such functions are usually referred to as monadic functions.

Syndicate content