[Haskell-cafe] expected vs inferred type confusion

Stephen Howard stephen at enterity.com
Mon Jun 23 11:16:10 EDT 2008

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:

    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
        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)

More information about the Haskell-Cafe mailing list