Books:RWH:BugReport

Books:RWH:BugReport

翻訳やコードのミスなどを報告していただけると嬉しいです。

新しい報告ほど上になるように以下に書いてください.
また,日付けを入れてくださいませ。日付は[[$date]]で入れられます。

ここで指摘していただいた誤りなどは,正誤表にページ順に反映していきます.-- nobsun

(2010/03/27 13:35:34 JST):正誤表への反映が滞っており,心配をお掛けしております.申し訳けありません.まもなく再開します.--nobsun


2010/04/14 01:20:00 JST

P.231 一番上のコード片

liftP2 ではなく lift2 になっている


2010/03/26 11:40:00 JST

P.412 上から5行目

, p_query の定義が記載されていない


2010/03/26 11:30:00 JST

P.410 上から2行目

誤: それぞれの名前と値のペア生成するが付け加わるだけです。

正: それぞれの名前と値のペア生成が付け加わるだけです。


2010/03/24 12:35:00 JST

P.642 下から6行目 sellItem が失敗すれば、orElse は return False アクションを呼びます。

 とあるが、コードがない。  (examples には trySellItem 関数としてあったが、本文にはない。)


2010/03/23 21:10:00 JST

P.616 下から12行目 (字抜け)

誤: ghci> andyCheck 10000 $ prop_suggest_try2

正: ghci> handyCheck 10000 $ prop_suggest_try2


2010/03/23 14:43:00 JST

P.611 上から 11 行目

 「ここでは -fvia-C を含めていますが、」となっているが、GHC-Options の表示がない。

 GHC-Options: -O2 -Wall -fvia-C -optc-O2

を表示する。


2010/03/23 14:28:00 JST

P.618 ./WordTest の実行例(2例とも)

誤: suggested sizings: Right (xxxxxx,y) の表示が抜けている


2010/03/22 21:10:00 JST

P.600 下から15行目

誤: runSTUArray は、いったんSTUArrayをから UArray を作成

正: runSTUArray は、いったんSTUArray から UArray を作成


2010/03/22 21:08:00 JST

P.534 下から1行目

誤: au <- xmlGetWidget xml castToDialog "

正: au <- xmlGetWidget xml castToDialog "addDialog"


2010/03/22 17:48:00 JST

P.589 下から9行目

誤: 最終版では、単純は高階の畳み込みと

正: 最終版では、単純な高階の畳み込みと


2010/03/18 20:10:00 JST

P.450 18.6.1 モナド変換子を作る の下2行

誤: 型 Maybe a が手に入れましょう。

正: 型 Maybe a を手に入れましょう。


2010/03/18 10:45:00 JST

P.429 下から11行目

誤: この関数は引数として、Cの型のへのポインタを

正: この関数は引数として、Cの型へのポインタを


2010/03/18 01:45:00 JST

P.302 buildMap の定義

    M.mapKeys (10 -) はチェックディジットの計算で余りが 0 の場合を考慮していない。

P.302 firstDigit の定義   bestScores paritySRL を使用しているが、paritySRL は1エントリのラン長の種類が一定ではない(1〜6要素)ので、 bestScores で計算を行うのは適切ではない。

以下の C で作成したチェックディジットを除いた12桁の P6形式のファイル名の(13桁のバーコードをエンコードした)データに対して、以下の結果となった。(左の列から ファイル名、examplesのソースによる出力、ソース修正後の出力で、 各末尾にチェックディジットを追加 ▲ が不一致)

"123456789003.ppm" Just [1,2,3,4,5,6,7,8,9,0,0,3,6] Just [1,2,3,4,5,6,7,8,9,0,0,3,6] "123456789013.ppm" Just [1,2,3,4,5,6,7,8,9,0,1,3,5] Just [1,2,3,4,5,6,7,8,9,0,1,3,5] "123456789023.ppm" Just [1,2,3,4,5,6,7,8,9,0,2,3,4] Just [1,2,3,4,5,6,7,8,9,0,2,3,4] "123456789033.ppm" Just [7,0,3,4,5,6,7,8,9,0,3,3,3] ▲ Just [1,2,3,4,5,6,7,8,9,0,3,3,3] "123456789043.ppm" Just [7,0,3,4,5,6,7,8,9,0,4,3,2] ▲ Just [1,2,3,4,5,6,7,8,9,0,4,3,2]

"123456789053.ppm" Just [7,0,3,4,5,6,7,8,9,0,5,3,1] ▲ Just [1,2,3,4,5,6,7,8,9,0,5,3,1] "123456789063.ppm" Just [8,2,5,4,5,6,7,8,9,0,6,3,1] ▲ Just [1,2,3,4,5,6,7,8,9,0,6,3,0] "123456789073.ppm" Just [1,2,3,4,5,6,7,8,9,0,7,3,9] Just [1,2,3,4,5,6,7,8,9,0,7,3,9] "123456789083.ppm" Just [1,2,3,4,5,6,7,8,9,0,8,3,8] Just [1,2,3,4,5,6,7,8,9,0,8,3,8] "123456789093.ppm" Just [1,2,3,4,5,6,7,8,9,0,9,3,7] Just [1,2,3,4,5,6,7,8,9,0,9,3,7]

paritySRL の bestScores を求める時は、左6桁の偶奇パリティ選択のZero,Oneによる length [Run] が paritySRL のエントリの length [Run] と等しい場合に distance の計算を行い、等しくない場合は、大きな値(6%1)をbestScores の結果とする。buildMap では mapKeys (`mod` 10) . を追加するかinsertMap の key を[0-9]から[1-10]にする などの修正が必要とおもいます

   bestScores 関数

誤: where scores = zip [distance d ( scaleToOne ps) | d <- srl] digits

正: where scores = zip [if length d == length ps

                            then distance d (scaleToOne ps)
                            else 1 % 1 | d <- srl] digits
  insertMap 関数 (buildMap 関数を修正しない場合)

誤: where key' = (key + digit) `mod` 10

正: where calckey = (key + digit) `mod` 10

          key' | calckey == 0    = 10
               | otherwise       = calckey         
  

2010/03/17 09:07:00 JST

P.395 下から7行目

誤: このプログラムのまさの最後でparseCSV関数を定義します。

正: このプログラムのまさに最後でparseCSV関数を定義します。


2010/03/17 09:05:00 JST

P.394 cells 関数定義 の first と次の2行のインデントが違う


2010/03/14 13:05:00 JST

P.292 12.8.4 一致のパリティを覚えるの直前の行

誤: -- 全部をリスト内包表記で書いた同じ式

   [(distance d (scaleToOne ps), n) | d <- srl, n <- digits]

正: なし

 本文の式では 100 要素のタプルのリストができてしまうのでは?  他の式では 10 要素のタプルのリストになるはず


2010/03/12 19:30:00 JST

P.278 下から6行目

誤: そのパリティビットはバーコードの13番目の桁をエンコードしたものです。

正: そのパリティビットはバーコードの1番目の桁をエンコードしたものです。

P.283 上から12行目 (すみません。すでに報告されていました。)

誤: where (left, right) = splitAt 5 rest

正: where (left, right) = splitAt 6 rest

バーコード 9 780132 11467 7 の 最左の 9 でパリティテーブルのエントリを決定して 次の 780132 の 6桁の偶奇パリティを定め左のグループとし、残りの5桁と算出したチェックディジットの6桁を右のグループとしていると思われます。


2010/03/12 05:50:00 JST

P.470 上から1行目

誤: あれば、IOError を呼んでその例外を投げ直します。

正: あれば、ioError を呼んでその例外を投げ直します。


2010/03/11 23:55:00 JST

P.390 下段

 Writer [Event] を MonadoHandle のインスタンスにできますが、特殊目的のモナドを作るのが安く簡単でより安全です。

となっていますが、インスタンス宣言、関数定義が記載されていません。サポートページのexamples にはありましたが、本文にも記載すべきでは? (examplesの存在を知らず、P.391 上から6行目の ghci> runWriterIO(safeHello "foo") の実行結果を理解するのに時間がかかった。)


2010/03/10 10:40:00 JST

P.355 中段 translated3 = の展開

誤: do act2

       let f pattern = do act2
       actN

正: do act2

       {- ... etc. -}
       actN

2010/03/10 10:27:00 JST

P.351 中段 returnSingleton x = [x] の次行

誤: return の型と同じ置換の手法を a -> [a] の型にも適用すると、型 a -> [a] になる

正: return の型と同じ置換の手法を (>>=) の型にも適用すると、型[a] -> (a -> [b]) -> [b] になる


2010/03/09 17:37:00 JST

P.325 上から4行目

誤: まず、Unitsがあります。

正: まず、unitsがあります。


2010/03/05 15:27:17 JST

P.236 上から9行目

誤: この指示はIterator型のデータ構成子として表現されています。

正: この指示はIterate型のデータ構成子として表現されています。


2010/02/21 17:38:17 JST

P.448 最上段

誤: getをStateTをReaderTへ持ち上げればよいわけです。

正: getをStateTからReaderTへ持ち上げればよいわけです。


2010/02/16 15:37:41 JST kazu

P 234 の一番下

誤: Maybe コンビネータ 正: maybe コンビネータ


2010/01/19 12:35:32 JST

P.463 上から1行目の最後から2行目の初めにかけての文で「通常」が重なっている。


2010/01/16 13:15:12 JST

P.365 上から7行目

誤: (>>=)の定義中のfmapをmapで置き換えることができます。

正: (>>=)の定義中のmapをfmapで(に)置き換えることができます。


2010/01/14 21:07:34 JST

P.328 で append' 関数を定義しているが、P.329 のモジュールヘッダで、および、P.330 の Monoid 型クラスのインスタンス宣言では append 関数というようにアポストロフィを省いた名前で参照している。


2010/01/12 22:26:46 JST

P.283 encodeDigits 関数の記述

誤: splitAt 5 rest

正: splitAt 6 rest


2010/01/10 01:24:54 JST

P.307 16 行目

誤: Eq a => a -> [(a,b)] -> Maybe a

正: Eq a => a -> [(a,b)] -> Maybe b


2010/01/06 22:43:02 JST

P.254 一番下のコード片

誤: fmap (1+) filter odd [1..10]

正: fmap (1+) (filter odd [1..10])


2010/01/04 23:57:05 JST

P.207-208

207ページの globToRegex 関数および globToRegex' 関数の内容と、208ページ1-2行目の文とで矛盾が起きている。

「最初の選択肢はグロブパターンの終端にぶつかったら(空文字を見ることになった時)、「行終端にマッチ」正規表現のシンボル$を返すことを要求しています。」

と208ページに書かれているが、最初の選択肢というのが207ページの globToRegex' 関数の "" にマッチするパターンであるのなら、この関数は "$" を返していないので誤りであり、正しくはこの関数で "$" を返し、かつ globToRegex 関数の最後の ++ "$" も不要である。

逆にこれらの関数が正しければ、208ページの文が誤りである。


2010/01/04 19:50:42 JST

P.154 最下行の文

誤: やはりその型のインスタンス

正: やはりその型クラスのインスタンス


2010/01/04 15:01:27 JST

P.128 [5.11 配列、オブジェクト、モジュールヘッダ] 直前のコード

ここで、説明無しに Data.Char.ord 関数を使用している。

一応130ページで import しているが、今まで Numeric.showHex 関数などもその都度**のライブラリにあるからインポートする必要があると説明していたので、ここでも同様に説明すべき。


2010/01/04 14:25:53 JST

P.127 上から4行目(コードを含めず)。

誤: simpleEscape の値はペアのリストです。

正: simpleEscapes の値はペアのリストです。


2010/01/04 13:47:23 JST

P.124 下から2行目

誤: rederJValueという名前のままにしましょう。

正: renderJValueという名前のままにしましょう。


2009/12/31 22:22:16 JST

P.496 下から4行目のコメント

誤: -- 走っているHaskellコマンドのサポート

正: -- Haskellコマンドの実行をサポート


2009/12/31 14:54:36 JST

P.475 コンパイラ通らねー

誤: optional p = (Just `liftM` p) `catchError` _ -> return Nothing

正: optional p = (Just `liftM` p) `catchError` \_ -> return Nothing


2009/12/16 18:31:51 JST (nakanowatari)

P.420

誤:runghc Enum.hs

正:runghc Enum1.hs

実行結果を得るには、実行するファイル名が異なります。


2009/12/16 14:33:51 JST (kazu)

P. 572

main が掲載されてないのに、駆動関数(main)に触れています。


2009/12/16 14:33:32 JST (kazu)

P. 570

誤:前方へ改行文字まで 正:ファイルの末尾に向かって改行の文字まで (あるいは、後方へ)


2009/12/16 14:33:32 JST (kazu)

P.430

コード中の erroffset nullPtr は、前の行の後ろにくっつけるべき


2009/12/13 20:08:11 JST

P.452 練習問題の中(タイポ)

誤: Either String をモナドにしていまので、

正: Either String をモナドにしていますので、


2009/12/10 00:34:04 JST

P.75 下から8行目

誤:「もう一つのファイルに書くという*のも*です。」

正:「もの」

P.172 下から10行目

誤?:「アクションはどこでも生成、*割り当て、引き渡し*が可能です」

正?:「代入、引数渡し」の方がよい? 特に「割り当て」の方はallocをイメージしてしまう。あれ?Haskellには「代入」という言葉は馴染まないんだっけ。ダメかな。

P.180 脚注

誤:「*相当するのかどうか*に興味があるかもしれない」

正:「相当することに」「相当するという事実に」

: -- RWH東京読書会にて。

P.226 下から11行目

誤?:「これは特別に*致命的な*バグです」

正?:「悪性の」の方がよいか。

P.226 下から8行目

誤:「別のファイルを開こうとしている呼び出し元に返ってきたときにだけ」

正:「呼び出し元に帰ってきて別のファイルを開こうとしたときにだけ」(「返って」=>「帰って」の変更も含む)

P.227 上から8行目

誤:「これを...しましょう。これは...保証するものです」

正:「If the “acquire” action succeeds, the “release” action is always called. 」の訳が抜けている。

P.226 下から9行目

誤?:「「使用」と「解放」の...*リソースを渡します*」

正?:「リソースが渡されることになります」の方がよいか。

P.227 真ん中辺り

誤:「不具合が発生するような*ことは*なくなります」

正:「ことも」

P.228 上から11行目

誤:「最初の*1歩*は」

正:「一歩」の方がよいのでは。

P.230 上から14行目

誤:「コンビネータを使っても簡潔性を回復できます」

正:「コンビネータを使ってその(引数の順序のまずさによって失われた)簡潔性をある程度回復することができます」

P.231 上から7行目

誤:「引数として*別の*関数を取り」

正:「別の」はない方がよいのでは。英文では「we refer to functions that take other functions as ...」と functions が続くので明確な区別のために other を付けているのではないか。

P.231 真ん中辺り

誤:「この関数を使って新しいコンビネータをどう書くかを説明しましょう」

正:「新しいコンビネータを使ってこの関数を書き換えるとどうなるかみてみましょう」

P.231 下から3行目

誤:「最大の優先順位」

意見:優先順位が高いのか低いのかよくわからない。「at the highest precedence level」では「level」となっている。

P.232 下から15行目(「9.7走査方法の制御」の次行)

誤:「どのディレクトリに、*いつ*入るべきか」

正:「どういう順番で」(意訳。後に出てくる「このリストは要素が削除されたり、要素の順番が入れ替わったりします」に合わせて。)

: -- [1..100]>>=pen


2009/12/01 05:45:15 JST (nakanowatari)

p563 並列GCC(typo)

誤:「並列GCCはまだ開発中」

正:「並列GCはまだ開発中」

原書には「a parallel garbage collector is under development for GHC」とあります。


2009/11/30 11:07:09 JST (kazu)

p558

誤:「このコードの変更は、いままでは言及する必要のなかったことがすべて注目すべきことになっています」

意味が分かりません。原文は「These changes to our code are remarkable for all the things we have not needed to say」です。"for" は、理由の for でしょう。僕ならこんな感じに訳します。

「このコードの変更で注目すべきことは、何について指示する必要がなかったかという点である。」


2009/11/28 00:04:36 JST

P.382, 383 Supply.hs SupplyClass.hs のコード。間違いではないけど、冗長(原著も)

誤: return (show "a: " ++ show a ++ ...

正: return ("a: " ++ show a ++ ...


以下は2刷で反映されました.


2009/11/21 21:28:31 JST

P.407 最後の段落(typo)

誤: hexify をトップレベル巻き上げて

正: hexify をトップレベルに巻き上げて


2009/11/16 00:18:53 JST

P.102 練習問題

問題番号の数値 2 が飛ばされている.


2009/11/14 01:39:37 JST

P.164 「6.8.2 要約:型に命名する3つの方法」の type の解説にタイポ

誤: 〜元の型名も別名も同じ意味使え、交換可能です。

正: 〜元の型名も別名も同じ意味で使え、交換可能です。


2009/11/14 01:24:31 JST

P.286/P.303 (こうしないと動かないはず)

P.286 parseRawPPM 関数の最後

誤:

  identity (listArray ((0,0),(width-1,height-1)) pxs)

正:

  identity (listArray ((0,0),(height-1,width-1)) pxs)

P.303 row関数の定義

誤:

  row j a = ixmap (l,u) project a
      where project i = (i,j)
            ((l,_),(u,_)) = bounds a

正:

  row i a = ixmap (l,u) project a
      where project j = (i,j)
            ((_,l), (_,u)) = bounds a

2009/11/14 01:13:39 JST

P.347 (「正」が判らないんですが……)

誤: モナドは評価順を制御する - モナドはある計算が他の計算より先に行なわれることを指定できるので……

正: (この章は「誤解を正す」章なので「モナドは評価順を制御する」のは誤解であって、解説には反駁が書かれるはず。ちなみに原著には「モナドは評価順を制御する」とだけ書かれていて、解説はなし)


2009/11/13 21:23:01 JST

P393 本文最後の行

誤:「構文解析噐」

正:「構文解析器」


2009/11/13 11:38:31 JST

P648 下から4行目 (kazu)

誤:「HTTPリダイレクトリスポンスは何回かたどります。」

正:「HTTPリダイレクトリスポンスは、数回しかたどりません。」


2009/11/12 20:39:48 JST

P.225 下から5行目

誤:「betterFindで、あらゆる ... を呼んでいます。もしエントリが ... 被せて返します」

正:「betterFindで、あらゆる ... を呼んでいるので、もしエントリが ... 被せて返すべきです」

: -- [1..100]>>=pen


2009/11/12 06:05:38 JST

P481 最後の実行例と段落

ghci> TOD 1000 0
Thu Jan 1 09:16:40 JST 1970

「1つめは1,000秒後にUTCの1970年1月1日の午前0時になる時点を表現するClockTimeを構成します。」

実行例と説明のどちらかが間違っている?


2009/11/12 02:00:09 JST

P.224 6行目

誤かな?:「これらの関数はすべて自由に使えるものです」

正かな?:「これらの関数(getPermissions と getModificationTime)は(ファイルタイプに関係なくどのファイルに対しても)自由に使うことのできる(ファイルの属性を取得できる?)関数のすべてです」

: -- [1..100]>>=pen


2009/11/10 20:11:50 JST

P210 4段落目(2つ目のコードの後)

誤:「非正格評では」

正:「非正格評価では」


2009/11/10 20:07:25 JST

P198 2段落目の冒頭

誤:「正格bytestring型は、」

正:「正格ByteString型は、」


2009/11/10 20:02:51 JST

P187 上から5行目

誤:「putStr(およびこれに類する出力関数は)データが」

正: 「putStr(およびこれに類する出力関数)はデータが」


2009/11/10 19:53:53 JST

P79 「4.3.1 行終端変換プログラム」の上から1行目から2行目にかけて

誤: 「Interact.hsファイルをコピーします。」

正: 「InteractWith.hsファイルをコピーします。」


2009/11/10 19:48:22 JST

P76 2段落目の「読むべきファイルの名前と書くべきファイルの名前です。」の下にあるコンソールへの入力

誤: $ ./Interact

正: $ ./InteractWith

同じ間違いが2ヶ所ある(引数ありと、引数無し)。


2009/11/10 19:39:05 JST

P69 「3.11 case式」の上から3行目

誤:「defaultは値がNothingのときに」

正:「defvalは値がNothingのときに」


2009/11/10 02:43:42 JST

P215 下から10行目

「失敗の可能性を*織り込められます*」=>「織り込めます」「織り込むことができます」

: -- [1..100]>>=pen


2009/11/10 02:43:42 JST

P202 下から4行目

誤:「結果を使って置き換えをする方法により」

正:なんだっけ?

: -- RWH東京読書会にて


2009/11/10 02:26:34 JST

P.221 13行目

「ループが長くデータ部が*長い*場合にはforMを使います。」=>「短い」

: -- [1..100]>>=pen


2009/11/09 23:31:26 JST

P.310 (13.2 マップ)

誤: Map.insertのような関数の動作は通常のHaskellの作法にしたがいます。入力データのコピーを返します。そのとき要求された変更を適用します。

正: Map.insertのような関数の動作は通常のHaskellの作法にしたがいます。要求された変更が適用された入力データのコピーを返します。


Last modified : 2010/05/22 12:52:30 JST