预计有一种类型,但“请求”有类型'* - > *”

时间:2015-07-05 06:00:29

标签: haskell

我编写了简单的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

此错误消息对我没有意义..

为什么会抛出此错误以及如何解决此问题?

2 个答案:

答案 0 :(得分:5)

Request附加了通用类型形式的数据(a中的Request a,它代表请求 - 正文) - 这是指Haskell告诉您Request 种类 * -> *

所以你基本上必须修复它 - 要么想到固定类型并添加它:

type RequestHandler = Request String -> IO Response

此类型已有类型(例如Request_String,因此您可以说:

type RequestHandler = Request_String -> IO Response

太。或者你使你的处理程序通用:

type RequestHandler a = Request a -> IO Response

当然,您必须更改其他一些功能/定义(例如helloWorldHandler)。

答案 1 :(得分:2)

Look at Request的类型:它需要一个类型参数,用于确定如何处理http请求的正文。这正是错误消息告诉你的内容:haskell期望一个参数var image = button.getElementsByTagName("span")[0]; if (isEnabled) { image.style.color = "#BBB" else { image.style.color = "#AAA" ,你给它零。