为什么 getEvent 的类型签名是什么?
Why is the type signature of getEvent what it is?
UI.NCurses
库中 getEvent
的类型签名具有类型签名
Window -> Maybe Integer -> Curses (Maybe Event)
然而,这个函数用了很多次后,我仍然不太清楚 Window
的用途。文档说它
Get[s] the next Event from a given window.
但这并没有真正启发我很多(阅读源代码对我来说同样没有启发)。在我看来,如果像按键这样的事件发生,它不会在 window 内发生。实验支持这个假设,无论我通过什么 window,我似乎都选择了相同的事件。如果我有几个 windows 打开,如果我通过一个或另一个有什么区别?
如果它确实使用 window 为什么类型签名不是更自然
Maybe Integer -> Update (Maybe Event)
一般来说,Haskell 希望函数的所有 "dependencies" 都作为参数传入。在 getEvent
的正文中,它多次使用传入的 win
参数。
面向对象的类比是 window.getEvent(timeout)
。但是在 FP 中,除了函数参数的顺序之外,第一个参数没有什么特别的。
至于如果你传递一个不同的 window 会发生什么,文档说:
Get the next 'Event' from a given window.
因此,大概您正在获取作为参数传递的特定 window 范围内的事件。进一步类比OO,就是两者的区别:
myMainWindow.getEvent(100)
popupWindow.getEvent(250)
也就是说,window
的不同实例。
getEvent
函数需要一个window
Haskell NCurses 库是在 GNU ncurses 库(一个 C 库)之上编写的。
由于 GNU ncurses 库对每个 window 都有单独的输入队列,getEvent
函数在调用适当的 GNU ncurses 例程时需要知道从哪个 window 获取输入。 windows 需要有单独的输入队列时,当输入没有在收到后立即处理时可能更明显。
Update
monad 与 Window
参数?任意
UI.NCurses
包包含一个未导出的函数
withWindow :: (Window -> IO a) -> Update a
正如它的类型所暗示的那样,可以用来轻松地将一个以 Window
作为输入的函数转换为 returns 其结果包含在 Update
monad 中的函数。
似乎开发 Haskell NCurses 库的人只是认为 getEvent
在大多数情况下使用 Window
作为参数而不是使用 Update
monad 会更好。
UI.NCurses
库中 getEvent
的类型签名具有类型签名
Window -> Maybe Integer -> Curses (Maybe Event)
然而,这个函数用了很多次后,我仍然不太清楚 Window
的用途。文档说它
Get[s] the next Event from a given window.
但这并没有真正启发我很多(阅读源代码对我来说同样没有启发)。在我看来,如果像按键这样的事件发生,它不会在 window 内发生。实验支持这个假设,无论我通过什么 window,我似乎都选择了相同的事件。如果我有几个 windows 打开,如果我通过一个或另一个有什么区别?
如果它确实使用 window 为什么类型签名不是更自然
Maybe Integer -> Update (Maybe Event)
一般来说,Haskell 希望函数的所有 "dependencies" 都作为参数传入。在 getEvent
的正文中,它多次使用传入的 win
参数。
面向对象的类比是 window.getEvent(timeout)
。但是在 FP 中,除了函数参数的顺序之外,第一个参数没有什么特别的。
至于如果你传递一个不同的 window 会发生什么,文档说:
Get the next 'Event' from a given window.
因此,大概您正在获取作为参数传递的特定 window 范围内的事件。进一步类比OO,就是两者的区别:
myMainWindow.getEvent(100)
popupWindow.getEvent(250)
也就是说,window
的不同实例。
getEvent
函数需要一个window
Haskell NCurses 库是在 GNU ncurses 库(一个 C 库)之上编写的。
由于 GNU ncurses 库对每个 window 都有单独的输入队列,getEvent
函数在调用适当的 GNU ncurses 例程时需要知道从哪个 window 获取输入。 windows 需要有单独的输入队列时,当输入没有在收到后立即处理时可能更明显。
Update
monad 与 Window
参数?任意
UI.NCurses
包包含一个未导出的函数
withWindow :: (Window -> IO a) -> Update a
正如它的类型所暗示的那样,可以用来轻松地将一个以 Window
作为输入的函数转换为 returns 其结果包含在 Update
monad 中的函数。
似乎开发 Haskell NCurses 库的人只是认为 getEvent
在大多数情况下使用 Window
作为参数而不是使用 Update
monad 会更好。