0

RealWorldHaskellの第24章のプログラムに簡単な変更を加えようとしています。ファイルの行数をカウントするコードを次に示します。

import qualified Data.ByteString.Lazy.Char8 as LB
lineCount :: [LB.ByteString] -> Int64
lineCount = mapReduce rdeepseq (LB.count '\n')
                      rdeepseq sum

ファイル内の単語をカウントするコードを書き込もうとしています。これが私が思いついたものです:

import qualified Data.ByteString.Lazy.Char8 as LB
lineCount :: [LB.ByteString] -> Int64
lineCount = mapReduce rdeepseq (length LB.words)
                      rdeepseq sum

ただし、次のようになります。

Couldn't match expected type `LB.ByteString -> b0'
            with actual type `Int'
In the return type of a call of `length'
Probable cause: `length' is applied to too many arguments
In the second argument of `mapReduce', namely `(length LB.words)'
In the expression:
  mapReduce rdeepseq (length LB.words) rdeepseq sum

何が問題なのですか?

4

1 に答える 1

1

関数ではなくlength、呼び出しの結果に適用したい。試してみてください。LB.wordsLB.words(length . LB.words)

于 2013-03-03T04:54:10.357 に答える