我正在为C中的库创建一个FFI模块,它希望在其他任何东西之前调用一次非重入函数.这个调用是幂等的,但是有状态的,所以我可以在每个Haskell调用中调用它.但它很慢并且由于不可重入而可能导致冲突.
那么这是使用unsafePerformIO的合适时机吗?我可以将Bool包装在一个不安全的IORef或MVar中,通过忽略后续调用(全局隐藏IORef状态为False的调用)使这些初始化调用成为幂等的.
如果没有,这样做的正确方法是什么?
人们可以解释Haskell中的lambda演算:
data Expr = Var String | Lam String Expr | App Expr Expr
data Value a = V a | F (Value a -> Value a)
interpret :: [(String, Value a)] -> Expr -> Value a
interpret env (Var x) = case lookup x env of
Nothing -> error "undefined variable"
Just v -> v
interpret env (Lam x e) = F (\v -> interpret ((x, v):env) e)
interpret env (App e1 e2) = case interpret env e1 of …Run Code Online (Sandbox Code Playgroud) continuations interpreter haskell lambda-calculus interpretation