2015-07-05 2 views
0

Network.accept возвращает мне ручку на прием соединения, которое я передаю в качестве аргумента respondHTTP (от Network.HTTP.Base) Их типов,поток Vs Handle, respondHTTP бросает ошибке

accept :: Socket -> IO (Handle, HostName, PortNumber) 
respondHTTP :: HStream ty => HandleStream ty -> Response ty -> IO() 

Этого линия - git-code

handleResponse = Kleisli (print ||| respondHTTP c) 

, бросает ошибку, как,

simpleserver.hs:43:53: 
    Couldn't match expected type ‘Network.TCP.HandleStream ty’ 
       with actual type ‘Handle’ 
    Relevant bindings include 
     handleResponse :: Kleisli IO (Either b (Response ty))() 
     (bound at simpleserver.hs:43:5) 
    In the first argument of ‘respondHTTP’, namely ‘c’ 
    In the second argument of ‘(|||)’, namely ‘respondHTTP c’ 

Как я могу преобразовать Handle (возвращенный с Network.accept) в Stream перед передачей его respondHTTP?

ответ

1

A HandleStream от Network.TCP и a Handle от System.IO - это две разные вещи; нет отношения суперкласса-подкласса. Они не взаимозаменяемы.

Создайте Socket, затем перейдите на страницу socketConnection, а не accept. Это вернет HandleStream, как вам нужно.

Смежные вопросы