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