Где находится Network.Socket.ByteString.Lazy sendTo?

И Network.Socket.ByteString, и Network.Socket.ByteString.Lazy имеют функцию send.

Network.Socket.ByteString имеет функцию sendTo, а Network.Socket.ByteString.Lazy — нет.

Как я могу использовать sendTo Network.Socket.ByteString с функцией Lazy.ByteString или Network.Socket.ByteString.Lazy send. (т.е. как мне сказать, куда отправить пакет.)

Может ли кто-нибудь порекомендовать хороший учебник по строкам Haskell, BytesStrings. Lazy.ByteStrings и т. д., поскольку я нахожу их очень запутанными (исходя из фона Java/Python).


person fadedbee    schedule 15.06.2012    source источник
comment
Обратите внимание, что sendTo является строгим в отправляемых данных, поэтому нет никакой реальной логики в передаче ему ленивой строки байтов. Вот почему функция существует только в строгих байтовых строках.   -  person sclv    schedule 15.06.2012
comment
@sclv - ваш правильный ответ (мой - решение). Не могли бы вы опубликовать свой комментарий в качестве ответа, чтобы я мог его принять?   -  person fadedbee    schedule 17.06.2012


Ответы (2)


Обратите внимание, что sendTo является строгим в отправляемых данных, поэтому нет никакой реальной логики в передаче ему ленивой строки байтов. Вот почему функция существует только в строгих байтовых строках.

person sclv    schedule 17.06.2012

Ответ состоял в том, чтобы сделать новую функцию:

import Data.ByteString as BS
import Data.ByteString.Lazy as LBS

lazyToStrictBS :: LBS.ByteString -> BS.ByteString
lazyToStrictBS x = BS.concat $ LBS.toChunks x

и используйте его, чтобы преобразовать Lazy.ByteString в обычный ByteString.

Вот обратное, так что я найду его, когда снова буду гуглить эту проблему в будущем.

import Data.ByteString as BS
import Data.ByteString.Lazy as LBS

strictToLazyBS :: BS.ByteString -> LBS.ByteString
strictToLazyBS x = LBS.fromChunks [x] 
person fadedbee    schedule 15.06.2012
comment
Взаимодействие с сокетами напрямую в большинстве современных программ очень редко, поэтому большинство приложений, о которых я знаю, используют ту или иную форму абстракции (например, pipes-network) для ленивых байтовых строк. Кроме того, +1 за то, что я найду его, когда снова буду гуглить эту проблему :) - person dflemstr; 16.06.2012