我得到了这个代码,它接受一个整数“n”和一个列表,然后将列表拆分为“n”个列表。
chunk n xs = chunk' i xs
where
chunk' _ [] = []
chunk' n xs = a : chunk' n b where (a,b) = splitAt n xs
i = ceiling (fromIntegral (length xs) / fromIntegral n)
这是它如何工作的一个例子:
*Main> chunk 5 [1..10]
[[1,2],[3,4],[5,6],[7,8],[9,10]]
我一直试图让它与 Data.ByteString 库一起使用,但无法弄清楚。
这是我一直在尝试使用的代码。
import qualified Data.ByteString as B
B.readFile "meow.txt" >>= (\x -> return $ chunk 4 x)
这是它给我的错误:
<interactive>:402:51:
Couldn't match expected type `[a10]'
with actual type `B.ByteString'
In the second argument of `chunk', namely `x'
In the second argument of `($)', namely `chunk 4 x'
In the expression: return $ chunk 4 x
这似乎是一个类型不匹配的问题,我假设是因为fromIntegral
. 有没有办法让块函数接受字节字符串?
我使用此功能的目标是严格接受任意长度的二进制文件,然后将其拆分为长度大致相等的 4 段,而不会丢失过程中的任何数据。