小编jjl*_*jjl的帖子

如何在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
查看次数

标签 统计

effect-systems ×1

haskell ×1