InternalIOException getAddrInfo: не существует (ошибка 10093) в Windows 8

Почему такой простой код не работает?

import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L

main :: IO ()
main = simpleHttp "http://www.dir.bg/" >>= L.putStr

Это приводит к следующей ошибке:

TestConduit.exe: InternalIOException getAddrInfo: не существует (ошибка 10093)


person The_Ghost    schedule 03.10.2013    source источник


Ответы (1)


Вы должны использовать withSocketsDo для инициализации сокетов. Нравится:

import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L
import Network (withSocketsDo)

main :: IO ()
main = withSocketsDo
      $ simpleHttp "http://www.dir.bg/" >>= L.putStr
person The_Ghost    schedule 03.10.2013
comment
На самом деле, вы всегда должны использовать withSocketsDo, в Windows или нет. Тогда у тебя никогда не будет этой проблемы. :-) - person Waldheinz; 03.10.2013
comment
Мне любопытно, почему эта инициализация не происходит за кулисами или по запросу автоматически? - person The_Ghost; 03.10.2013
comment
@The_Ghost или спроектирован так, чтобы хорошо напечатанный код не взорвался, верно? В haskell нет оправдания таким вещам. - person jberryman; 03.10.2013
comment
Да, но мы могли бы поставить еще много чего. Мы могли тормозить с помощью SocketsDo по частям и заставлять людей каждый раз инициализировать его. Я считаю, что это чушь. Если есть способы заставить людей неявно писать более правильный код, будет лучше. - person The_Ghost; 07.10.2013
comment
Спасибо, это устранило проблему для меня. - person twreid; 31.03.2014