相关疑难解决方法(0)

unsafePerformIO和FFI库初始化

我正在为C中的库创建一个FFI模块,它希望在其他任何东西之前调用一次非重入函数.这个调用是幂等的,但是有状态的,所以我可以在每个Haskell调用中调用它.但它很慢并且由于不可重入而可能导致冲突.

那么这是使用unsafePerformIO的合适时机吗?我可以将Bool包装在一个不安全的IORef或MVar中,通过忽略后续调用(全局隐藏IORef状态为False的调用)使这些初始化调用成为幂等的.

如果没有,这样做的正确方法是什么?

c haskell ffi unsafe-perform-io

12
推荐指数
1
解决办法
305
查看次数

在哈斯克尔解释Parigot的lambda-mu演算

人们可以解释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

8
推荐指数
2
解决办法
675
查看次数