Haskell 如何防止跨线程共享某些值(或状态)?
比如说,我正在编写一个库,它公开了一个看起来像Haskell 如何防止跨线程共享某些值(或状态)?,haskell,Haskell,比如说,我正在编写一个库,它公开了一个看起来像 data LibEnv=LibEnv{envthreadunasseresource::_whatever} 类型LibraryT=ReaderT LibEnv 如何防止我的库的用户从MonadIO m=>LibraryT mmonad中调用forkIO,而不重新初始化envthreadunasseresource?我建议将\u whatever包装到资源库中的池中用于管理数据库连接等 要构建一个Pool\u which,您需要为资源构建提供一个
data LibEnv=LibEnv{envthreadunasseresource::_whatever}
类型LibraryT=ReaderT LibEnv
如何防止我的库的用户从
MonadIO m=>LibraryT m
monad中调用forkIO
,而不重新初始化envthreadunasseresource
?我建议将\u whatever
包装到资源库中的池中用于管理数据库连接等
要构建一个Pool\u which
,您需要为资源构建提供一个IO\u which
,为资源销毁提供一个\u which->IO()
。如果您随后仅使用with resource
功能访问\u which
,然后,您可以得到一个新初始化的\u whatever
,而不管您处于什么线程上下文中。我建议将\u whatever
包装到资源池中的池中,该库通常用于管理数据库连接等
要构建一个Pool\u which
,您需要为资源构建提供一个IO\u which
,为资源销毁提供一个\u which->IO()
。如果随后仅使用with resource
函数访问\u whatever
,则无论您处于何种线程上下文中,都可以获得新初始化的\u whatever