I am having issues with type signatures for the resourceHandler action below. I haven't figured out what I'm doing wrong to cause the wrong type to be returned. It looks like Haskell is inferring that I'm returning a function from this action, when from the type signature I've specified, that is not what I'm wanting. The gist of the code is based on the request_method of the passed in HttpRequest, choose an action to run and pass it the needed parameters.

the error:

renao.hs:6:4:
   Couldn't match `HttpResponse' against `IO HttpResponse'
     Expected type: IO HttpResponse
     Inferred type: IO (IO HttpResponse)
   In the expression: return $ (handler session request)
   In the result of a 'do' expression: return $ (handler session request)

the code:

import HttpMessage
import HttpSession

resourceHandler :: HttpSession -> HttpRequest -> IO HttpResponse
resourceHandler session request = do
   return $ handler session request
   where
       handler = which_handler request
       which_handler r = case request_method r of
           Get    -> get_resources
           Head   -> last_modified
           Post   -> update_resources
           Put    -> create_resources
           Delete -> delete_resources


get_resources :: HttpSession -> HttpRequest -> IO HttpResponse
get_resources session request = undefined

-- ... the same stubbed definition for the other handlers (last_modified, etc)
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to