独習 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.

独習 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系の言語はまだ面白いと思う。

Syndicate content