首页 > 解决方案 > 为什么 getEvent 的类型签名是什么?

问题描述

getEvent来自UI.NCurses库的类型签名具有类型签名

Window -> Maybe Integer -> Curses (Maybe Event)

然而,在使用了这个函数之后,我仍然不太确定Window它的用途。文档说它

从给定窗口获取[s] 下一个事件。

但这并没有真正启发我(阅读源代码对我来说同样没有启发)。在我看来,如果像按键这样的事件发生,它不会在窗口内发生。实验支持了这个假设,无论我通过什么窗口,我似乎都会接受相同的事件。如果我打开了几个窗口,如果我通过一个或另一个会有什么不同?

如果它确实使用窗口,为什么类型签名不是更自然

Maybe Integer -> Update (Maybe Event)

标签: haskellncursestype-signature

解决方案


一般来说,Haskell 希望函数的所有“依赖项”都作为参数传入。在它的主体内,多次getEvent使用传入的参数。win

OO 类比是window.getEvent(timeout). 但是在 FP 中,除了函数参数的顺序之外,第一个参数没有什么特别之处。

至于如果你通过不同的窗口会发生什么,文档说:

从给定窗口获取下一个“事件”。

因此,据推测,您正在获取范围为作为参数传递的特定窗口的事件。为了进一步类比 OO,这就是以下之间的区别:

myMainWindow.getEvent(100)
popupWindow.getEvent(250)

也就是说,不同的实例window


推荐阅读