haskell - 为什么 getEvent 的类型签名是什么?
问题描述
getEvent
来自UI.NCurses
库的类型签名具有类型签名
Window -> Maybe Integer -> Curses (Maybe Event)
然而,在使用了这个函数之后,我仍然不太确定Window
它的用途。文档说它
从给定窗口获取[s] 下一个事件。
但这并没有真正启发我(阅读源代码对我来说同样没有启发)。在我看来,如果像按键这样的事件发生,它不会在窗口内发生。实验支持了这个假设,无论我通过什么窗口,我似乎都会接受相同的事件。如果我打开了几个窗口,如果我通过一个或另一个会有什么不同?
如果它确实使用窗口,为什么类型签名不是更自然
Maybe Integer -> Update (Maybe Event)
解决方案
一般来说,Haskell 希望函数的所有“依赖项”都作为参数传入。在它的主体内,多次getEvent
使用传入的参数。win
OO 类比是window.getEvent(timeout)
. 但是在 FP 中,除了函数参数的顺序之外,第一个参数没有什么特别之处。
至于如果你通过不同的窗口会发生什么,文档说:
从给定窗口获取下一个“事件”。
因此,据推测,您正在获取范围为作为参数传递的特定窗口的事件。为了进一步类比 OO,这就是以下之间的区别:
myMainWindow.getEvent(100)
popupWindow.getEvent(250)
也就是说,不同的实例。window
推荐阅读
- c++ - 为什么可以使用右值引用作为没有生命周期问题的成员?
- flutter - 如何在 Flutter 中扭曲图标按钮
- c - 初始化大小为 2 的数组是否与分配大小为 2 的数组的指针相同?
- angular - 如何在 Angular 11 / Rxjs 中等待更新时保留可观察异步管道数组的最后一个值
- node.js - 我的反应角色代码不起作用 Discord.JS
- javascript - jquery模态调用另一个函数,从另一个函数调用时打开
- powerbi - DAX- 列查找
- javascript - javascript绑定方法参数
- powershell - 从 Function App Powershell 脚本向 Azure DevOps 进行身份验证
- c++ - 在类构造函数之前调用函数