标签: effect-systems

如何在haskell中构成"更自由"的效果?

我试图从基于变换器的monad堆栈重写一个简单的解释器到基于更自由的效果,但是我正在努力将我的意图传达给GHC的类型系统.

我目前只使用StateFresh效果.我正在使用两种状态,我的效果运动员看起来像这样:

runErlish g ls = run . runGlobal g . runGensym 0 . runLexicals ls
  where runGlobal    = flip runState
        runGensym    = flip runFresh'
        runLexicals  = flip runState
Run Code Online (Sandbox Code Playgroud)

最重要的是,我已经使用以下类型定义了一个函数FindMacro:

findMacro :: Members [State (Global v w), State [Scope v w]] r
             => Arr r Text (Maybe (Macro (Term v w) v w))
Run Code Online (Sandbox Code Playgroud)

到目前为止所有这一切都完美无缺.当我尝试编写时出现问题macroexpand2(好吧,macroexpand1,但我正在简化它,所以问题更容易理解):

macroexpand2 s =
  do m <- findMacro s
     return $ case m of
       Just j -> True
       Nothing -> False …
Run Code Online (Sandbox Code Playgroud)

haskell effect-systems

15
推荐指数
1
解决办法
678
查看次数

什么是类型和效果系统?

关于效果系统维基百科文章目前只是一个简短的存根,我一直想知道什么是效果系统.

  • 除了类型系统之外,是否还有任何具有效果系统的语言?
  • 您熟悉的主流语言中可能的(假设的)符号与效果类似吗?

types type-systems type-theory effects effect-systems

14
推荐指数
2
解决办法
3365
查看次数