Я хочу отправить список фотографий на приемник, чтобы сохранить их на диске. Каждая структура Photo содержит поле content
типа lazy ByteString.
В основном я хочу сделать что-то вроде этого:
CL.sourceList photos $$ sinkPhotos
Я хотел бы повторно использовать CB.sinkFile
в моем приемнике, поскольку, если я правильно понимаю, он обрабатывает ошибки. Вот моя попытка:
mkFilePath :: Photo -> FilePath
mkFilePath photo = last $ splitOn "/" (url photo)
sinkPhotos :: Sink Photo IO ()
sinkPhotos = do
mphoto <- await
case mphoto of
Nothing -> return ()
Just photo -> do
yield ct =$ CB.sinkFile fp
sinkPhotos
where fp = mkFilePath photo
ct = BL.toStrict $ content photo
Это не удается с:
src/Screepy/Main.hs:30:23:
No instance for (MonadResource IO)
arising from a use of `CB.sinkFile'
Possible fix: add an instance declaration for (MonadResource IO)
In the second argument of `(=$)', namely `CB.sinkFile fp'
In a stmt of a 'do' block: yield ct =$ CB.sinkFile fp
In the expression:
do { yield ct =$ CB.sinkFile fp;
sinkPhotos }
- Как я могу обернуть
sinkFile
для работы со структурой, а не напрямую сByteString
? - Как я могу создать
Source
изByteString
?