randomsは再帰的に定義されているので乱数ジェネレータを返すことはない。[Char]IOで乱数ジェネレータを作る上の方法では乱数の種が毎回同じだったので結果が変わらないことになる。それでは困るのでIOアクションを使って違う乱数ジェネレータを手に入れたい。gen)getStdGenを利用すると実行時ごとに違う値を使えるが実行中はジェネレータを更新できない。newStdGenを使って乱数ジェネレータを更新する。いい、プロミスを強制(force)することで値が計算される。このサンクでただの数のリストをサンクの列として処理するのは非効率。そこでbytestringを使う。普通のリストは型が[a]だがbytestringではByteString型を、aの代わりにWord8をやりとりする。Word8は8ビット符号なし整数なので0から255までの整数でNumクラスのインスタンスになっている。5などの数字は多層型なのでWord8としても振る舞えることからそのまま使うことが出来る。bytestringには正格バージョンと遅延バージョンがあるのでimportするときに好きな方を選んで使う。S遅延bytestringは要素ごとにサンクになるのではなく、L2キャッシュに乗るように64Kバイト単位でチャンク(chunk)としてまとめてある。正格bytestringのリストと見ると分かりやすい。ByteStringの生成と値の取り出し方。ghciでの表示がテキストと異なるのでshowあたりの実装が変わったのかもしれない。Emptyとあるが手元の環境では"can"のみが帰ってくる。110]正格、遅延Bytestringの変換も可能。どちらもData.ByteString.Lazyの関数を使う。bytestring同士の連結もB.consで出来るようになっている。82]の方が分かりやすい?"UPQR"普通にリストを使ったプログラムのパフォーマンスに問題があればそれから書きなおせばいい。(実際に使う場合は文字コードがらみで注意点があるらしいので日本語訳を参照する。メモはてなブログをはじめよう!kuyataさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。