プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

Haskell入門【3】

すごいHaskellたのしく学ぼう! | Miran Lipovača, 田中 英行, 村主 崇行 |本 | 通販 | Amazon
↑これの第14章(p315)から

Maybeモナド:失敗の可能性という文脈付きの値を表す
リストモナド:非決定性がついた値を表す
Writerモナド:もう1つの値がくっついた値を表し、付加された値はログのように振る舞う。

Writerモナドを使えば、一連の計算を行っている間、すべてのログが単一のログ値にまとめて記録されることを保証できる。

ユーグリットの互除法→2つの数を取ってその最大公約数(2つの数をどちらも割り切れる数のうち最大のもの)を求めるアルゴリズム p323
snd→ペアを受け取ると、2つ目の構成要素を返す

関数はアプリカティブファンクター。これにより、関数が将来返すであろう値を、すでに持っているかのように演算できる p330
関数にとっての文脈とは、値がまだ手元になく、値が欲しければその関数を別の何かに適用しないといけない
stack→いくつかのデータを格納でき、次の2つの操作をサポートするデータ構造 p333
①Push:スタックのてっぺんに要素を積む
②Pop:スタックのてっぺんの要素を取り除く

Control.Monad.Stateモジュールは、状態付き計算を包んだnewtypeを提供している
>>=を使えば2つの状態付き計算をのりづけすることができる p336

モナド値を操作したり、モナド値を返したりする関数をモナディック関数という p342
liftMは関数とモナド値を取って、関数でモナド値を写してくれる≒fmap p343

任意の入れ子になったモナドは平らにできる(join関数) p346
冪集合:その集合の部分集合を全て含んだ集合 p350

分数のためのデータ型:Rational p357

いくつかのデータ構造に、そのデータ構造の一部分に注目するための方法:Zipper p363
データ構造の更新を簡単にし、データ構造を辿るという操作を効率的にしてくれる

ジッパーを使ったファイルシステム p374

付録:日本語のような一文字が1バイトで収まらない文字を含むテキストを扱う時、そのままbytestringに書き換えると問題が生じる(エンコード、文字列リテラルがStringの値)

読み終わりました。
できれば、ちょっとしたプログラムを組もうと思います。