我应该如何在GHC的ghci中“使用隐式上下文创建命令”

时间:2012-02-05 02:37:06

标签: haskell polymorphism type-safety ghci

我知道ghciIO monad中有效运作。最初我想象ghci可能会处理另一个monad或IO的转换,但文档清楚地表明这不起作用。

相反,我尝试使用隐式参数,但ghci禁止所有尝试从ghci传递隐式参数,除了本地绑定let .. in中的隐式参数,这是完全没用的。

foo <- meow_for_t "chicken"
bar <- let ?foo = foo in purr "tuna"

我们所包含的模块说:

purr (Eq t, ?foo :: Foo t) => String -> IO ()
purr s = ...

我希望purr "tuna"单独使用foo <-?foo <-或至少let ?foo = foo sans in就可以了。工作

我也许可以使用以下特技创建全局IORef

foo :: IORef (Foo Sometype)
foo = unsafePerformIO $ newIORef []

但显然我会在Foo中牺牲我可爱的多态性。

purr中创建以类型安全方式修改ghci全局状态的顶级命令ghci的“正确方法”是什么?

理想情况下,应该有另一系列命令使用新类型重新创建所述全局状态,之后purr应继续以类型安全的方式执行,只需使用新类型。

1 个答案:

答案 0 :(得分:1)

隐式参数是GHC扩展。您可以在ghci上使用:set -XImplicitParams启用它。