任务是创建动态链接库,它封装了数据库的辛勤工作。由于一些设计限制,我有一个定义的接口(interface),其中包含许多功能。每个函数都接受一个参数并在数据库查询中使用它们。数据库连接应该在 dll 中,应用程序不想打扰是否有任何连接。

初始化数据库连接然后将其提供给每个函数而不显式传递它的最佳方法是什么。

当然,总的来说,我想使用 State monad。但是 dll 并不是为了有一个入口点而设计的。

最佳答案

您可以使用 unsafePerformIO 来“作弊”:

{-# NOINLINE globalVar #-}
globalVar :: MVar Integer
globalVar = unsafePerformIO (newMVar 17)

我对固定的 API 表示哀悼。

10-06 13:05