
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)