誤:
game :: Stock -> [(Score, Hand, Player)
正:
game :: Stock -> [(Score, Hand, Player)]
誤:
{# LANGUAGE OverloadedLists}
nameListValue :: Value
正:
{-# LANGUAGE OverloadedLists #-}
nameListValue :: Value
また、赤文字は {-# LANGUAGE OverloadedLists #-}
につくべき。
誤:
中値
演算子とあえて書いているようにHaskellでは中置しない演算子もあります。ただし、Haskellにおける演算子はほぼすべて2つの項(2引数)をとる中値
演算子です。2.4.5で解説します。
正:
中置
演算子とあえて書いているようにHaskellでは中置しない演算子もあります。ただし、Haskellにおける演算子はほぼすべて2つの項(2引数)をとる中置
演算子です。2.4.5で解説します。
誤:
中値
演算子は(と)で囲むことで通常の関数と同じように利用できます。第一引数が中値
演算子の左側、第二引数が中値
演算子の右側だったものになると覚えてください。
正:
中置
演算子は(と)で囲むことで通常の関数と同じように利用できます。第一引数が中置
演算子の左側、第二引数が中置
演算子の右側だったものになると覚えてください。
誤:
() で明示的に参照する識別子を列挙するか、
qualifiedas
を使ってどのモジュール由来の識別子なのか区別できるように修飾しておくのがいいでしょう。
正:
() で明示的に参照する識別子を列挙するか、
qualified ... as
を使ってどのモジュール由来の識別子なのか区別できるように修飾しておくのがいいでしょう。
これは誤植ではないかもしれないです。
誤:
また、検索条件を::から始めると、型で検索ができます。ghcパッケージの...
正:
また、検索条件を::から始めると、型で検索ができます。
Char -> String -> [String]
の型で検索してみると。ghcパッケージの...
誤:
以後も同様に
derving
句を指定します。
正:
以後も同様に
deriving
句を指定します。
誤:
例えば、Either a b型(2.7.4参照)
ととともに
アプリケーション内で
正:
例えば、Either a b型(2.7.4参照)
とともに
アプリケーション内で
たぶん誤植だと思うけど、違うかもしれない。
誤:
HaskellのPreludeではデータを
現
すほとんどの型が...
正:
HaskellのPreludeではデータを
表
すほとんどの型が...
このあたりから実行できないコードが混ざってくるので、誤植かどうか判断がつきづらい部分がある。
誤:
Prelude>
Prelude> return ("Hoge", "Piyo") >>= (\(x, y) -> putStrLn x >>= (\_ -> putStrLn y))
Hoge
Piyo
正:
Prelude> return ("Hoge", "Piyo") >>= (\(x, y) -> putStrLn x >>= (\_ -> putStrLn y))
Hoge
Piyo
誤植かどうか微妙
誤:
main :: IO ()
main = do
hSetBuffering stdin LineBuffering
x <- getChar
print x
x <- getChar
print x
x <- getChar
print x
xs <- getLine
putStrLn xs
正:
import System.IO
main :: IO ()
main = do
hSetBuffering stdin LineBuffering
x <- getChar
print x
x <- getChar
print x
x <- getChar
print x
xs <- getLine
putStrLn xs
誤:
同じく System.
Drectory
モジュールの
正:
同じく System.
Directory
モジュールの
誤:
System.
Drectory
モジュールの
正:
System.
Directory
モジュールの
誤:
Prelude System.Directory> findExecutable $ "ghc" + exeExtension
...
Prelude System.Directory> findExecutables $ "ghc" + exeExtension
...
正:
Prelude System.Directory> findExecutable $ "ghc" ++ exeExtension
...
Prelude System.Directory> findExecutables $ "ghc" ++ exeExtension
...
+
ではなく ++
が正しい。
誤:
throwMyException関数が引数の値によって独自の例外を
thorwIO
で発生させます。
正:
throwMyException関数が引数の値によって独自の例外を
throwIO
で発生させます。
誤:
Human データコンストラクタは、
Strig
-> Int -> Gender...
正:
Human データコンストラクタは、
String
-> Int -> Gender...
誤:
第二引数で指定した初期値のリストの長さ
がが
配列のサイズよりも
正:
第二引数で指定した初期値のリストの長さ
が
配列のサイズよりも
誤:
concatMultiFiles filePaths dst =
handleMultiFiles filepaths (\hdl -> copyFile hdl dst)
正:
concatMultiFiles filePaths dst =
handleMultiFiles filePaths (\hdl -> copyFile hdl dst)
誤:
handleMultiFiles filePaths $ \hdl ->
hClose hdl
正:
handleMultiFiles filePaths $ \hdl -> do
hClose hdl
誤植ではないかもしれない。
Ord
クラスの2行目の ::
の前にたぶん空白が1つ必要?(今までのコード例から推測)
誤:
class Triple a where
triple :: a -> a
instance Triple Int where
triple n = n * 3
instance Triple String where
triple s = s ++ s ++ s
正:
{-# LANGUAGE FlexibleInstances #-}
class Triple a where
triple :: a -> a
instance Triple Int where
triple n = n * 3
instance Triple String where
triple s = s ++ s ++ s
誤:
ghci> :set -XOverloadedStrings
ghci> import qualified Data.Text as T
ghci> simon :: Text
ghci> simon = "Many Simons."
ghci> :t T.pack
T.pack :: String -> Text
ghci> :t T.unpack
T.unpack :: Text -> String
正しくは以下のどちらか。
import as
の場合。
ghci> :set -XOverloadedStrings
ghci> import Data.Text as T
ghci> simon = "Many Simons." :: Text
ghci> :t T.pack
T.pack :: String -> Text
ghci> :t T.unpack
T.unpack :: Text -> String
import qualified as
の場合。たぶん書籍ではこちらを意図していたと思われる。
simon :: Text
の行がいらなくて、次の行でsimon = "Many Simons." :: T.Text
としなければならない。
ghci> :set -XOverloadedStrings
ghci> import qualified Data.Text as T
ghci> simon = "Many Simons." :: T.Text
ghci> :t T.pack
T.pack :: String -> T.Text
ghci> :t T.unpack
T.unpack :: T.Text -> String
誤植じゃないかも。
誤:
main :: IO ()
main = do
let animals = V.fromList ["Dog", "Pig", "Cat", "Fox", "Mouse", "Cow", "Horse"]
print . V.sum . V.map length $ animals
正:
import qualified Data.Vector as V
main :: IO ()
main = do
let animals = V.fromList ["Dog", "Pig", "Cat", "Fox", "Mouse", "Cow", "Horse"]
print . V.sum . V.map length $ animals
誤植ではないかもしれない。
誤:
animal :: Parser Animal
animal = (string "Dog" >> return Dog) <|> (string "Pig" >> return Pig)
正:
import Control.Applicative
data Animal = Dog | Pig deriving Show
animal :: Parser Animal
animal = (string "Dog" >> return Dog) <|> (string "Pig" >> return Pig)
誤:
import qualified Data.Text as T
import Data.Attoparsec.Text hiding (take)
正:
{-# LANGUAGE OverloadedStrings #-}
import Data.Attoparsec.Text hiding (take)
誤植じゃないかもしれない。
誤:
deriveJSON defaultOptions ''Department
taro :: Human
taro = Human { name = "Taro" , age = 30 }
正:
deriveJSON defaultOptions ''Department
-- taro :: Human
-- taro = Human { name = "Taro" , age = 30 }
誤:
data IntStr = IntData Int | StrData String
encode $ IntData 999
encode $ StrData "World!"
正:
data IntStr = IntData Int | StrData String deriving Show
deriveJSON defaultOptions ''IntStr
main :: IO ()
main = do
B.putStrLn $ encode $ IntData 999
B.putStrLn $ encode $ StrData "World!"
誤植ではないかもしれない。
誤:
nameListValue :: Value
nameListValue = ...
正:
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson
nameListValue :: Value
nameListValue = ...
誤植ではないかもしれない。
誤:
data Person = Person
{ name :: String
, age :: Int
} deriving Show
instance ToJSON Person where
toJSON (Person n a) =
object ["name" .= n, "age" .= a]
instance FromJSON Person where
parseJSON (Object v) = Person
<$> v .: "name"
<*> v .: "age"
parseJSON i = typeMismatch "Person" i
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson
import Data.Aeson.Types
data Person = Person
{ name :: String
, age :: Int
} deriving Show
instance ToJSON Person where
toJSON (Person n a) =
object ["name" .= n, "age" .= a]
instance FromJSON Person where
parseJSON (Object v) = Person
<$> v .: "name"
<*> v .: "age"
parseJSON i = typeMismatch "Person" i
誤:
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
data Person = ...
正:
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
import Data.Aeson
data Person = ...
誤植ではないかもしれない。
誤:
actionIO :: IO a -> IO a
actionIO action = ...
正:
import Control.Exception
actionIO :: IO a -> IO a
actionIO action = ...
誤植ではないかもしれない。
誤:
module Lock
( Lock
, newLock
, withLock
) where
import Control.Concurrent
import Control.Exception
data Lock a = Lock (MVar a)
正:
module Lock
( Lock
, newLock
, withLock
) where
import Control.Concurrent
data Lock a = Lock (MVar a)
誤植ではないかもしれない。
誤:
data ShareResource a = ...
正:
import Control.Concurrent
import Control.Exception
data ShareResource a = ...
誤植ではないかもしれない。
誤:
main :: IO ()
main = ...
正:
import Control.Monad
main :: IO ()
main = ...
誤植ではないかも。
コードをコンパイルするには http-conduit
パッケージのインストールが別途必要になる。
何を言っているのかわかりませんでした・・・。
Stack による hjq.cabal の初期の設定では、テストは src ディレクトリ次のモジュールを読み込むようになっているため、すぐにテストが書ける
たぶん誤植
誤:
さっそく、HUnitライブラリを提供しているHUnitパッケージをbuild-dependsに追加しましょう。
hs-source-dirs
を次のようにします。
正:
さっそく、HUnitライブラリを提供しているHUnitパッケージをbuild-dependsに追加しましょう。
hjq-test
を次のようにします。
誤:
このテストがグリーンになるように実装 (
JqFilterParser
) を修正しなくてはいけません。
正:
このテストがグリーンになるように実装 (
jqFilterParser
) を修正しなくてはいけません。
誤:
これで、
jqFilterparserTest
も成功するようになりました。
正:
これで、
jqFilterParserSpacesTest
も成功するようになりました。
誤:
インストールせず試したいときは stack build 後に
stack exec hjq
と実行して下さい。
正:
インストールせず試したいときは stack build 後に
stack exec hjq-exe
と実行して下さい。
誤:
RDBMS に対応したデータ型生成用のドライバ、スキーマ名、テーブル名、
driving
句に追加する型クラス名を渡す必要があります。
正:
RDBMS に対応したデータ型生成用のドライバ、スキーマ名、テーブル名、
deriving
句に追加する型クラス名を渡す必要があります。
誤:
*25
スキーム名
とは SQLite ではデータベース名のことであり...
正:
*25
スキーマ名
とは SQLite ではデータベース名のことであ
誤:
Model.WeightRecorder
についても同様にデータ登録と...
正:
Model.WeightRecord
についても同様にデータ登録と...
この一段落と続くコードが、まるまる何言ってるのかわかりませんでした。
続いて data-files
次のファイルに
...
誤:
外部へのインタフェースなのに対し、
src/Web.WeightRecorde.hs
はアプリケーション本体として...
正:
外部へのインタフェースなのに対し、
src/Web.WeightRecorder.hs
はアプリケーション本体として...
誤:
src では
Clien.hs
とServer.hsに加えて...
正:
src では
Client.hs
とServer.hsに加えて...
誤:
次の内容を最後にまとめて書いて、
starck runghc counter.hs
で実行しましょう。...
正:
次の内容を最後にまとめて書いて、
stack runghc counter.hs
で実行しましょう。...
誤:
ライブラリ依存の部分を適切に
を切り出すと
方法などがあります。
正:
ライブラリ依存の部分を適切に
切り出す
方法などがあります。
誤:
返り値はオークションが開催していない場合を考慮して
Maybe AucitonItem
とします。
正:
返り値はオークションが開催していない場合を考慮して
Maybe AuctionItem
とします。