我正在使用Lucid为静态站点生成代码,在HtmlT (Reader MyEnv)
monad中编写代码以透明地传递存储在MyEnv
中的一些配置。
我正在使用的框架封装了从Html ()
到文件输出的转换,所以我想编写一个函数来将HtmlT (Reader MyEnv) ()
转换为Html ()
;类似于:
withEnv :: MyEnv -> HtmlT (Reader MyEnv) () -> Html ()
但我还没有想出一个简单的方法来实现这一点。我是否缺少一些基本的东西,或者有解决方法?
您可以使用commuteHtmlT
:
commuteHtmlT :: HtmlT (Reader MyEnv) a -> Reader MyEnd (Html a)
runReader :: Reader a r -> a -> r
withEnv :: MyEnv -> HtmlT (Reader MyEnv) a -> Html a
withEnv e = ($ e) . runReader . commuteHtmlT