2015-07-05 22 views
3

我寫了簡單的Hello World服務器(HTTP)和我宣佈了我的請求處理程序的類型,預計有型,而是「請求」有一種「* - > *」

type RequestHandler = Request -> IO Response 

它拋出錯誤的,

simpleserver.hs:11:23: 
    Expecting one more argument to ‘Request’ 
    Expected a type, but ‘Request’ has kind ‘* -> *’ 
    In the type ‘Request -> IO Response’ 
    In the type declaration for ‘RequestHandler’ 

complete-code

此錯誤消息是沒有意義的我..

爲什麼THI拋出錯誤,我該如何解決這個問題?

回答

5

Request在連接到它的通用型的形式,具有數據(aRequest a以及它所代表的請求 - ) - 當哈斯克爾告訴你,Request樣這意味着* -> *

所以你基本上要修復它 - 要麼想一個固定式的,並將其添加:

type RequestHandler = Request String -> IO Response 

已經有類型本(例如Request_String所以你可以這樣說:

type RequestHandler = Request_String -> IO Response 

。或者你讓你的處理器通用:

type RequestHandler a = Request a -> IO Response 
當然

有了這個,你將不得不改變你的一些其他功能/定義的太(例如helloWorldHandler)。

2

Look atRequest的類型:它需要一個單一的類型參數,它用來確定如何處理http請求的主體。這正是錯誤信息告訴你的:haskell期望一個參數爲Request,並且你給它零。

相關問題