运行 Reader 包裹在 HtmlT 中,产生 Html ()
Run Reader wrapped in HtmlT, producing Html ()
我正在使用 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
我正在使用 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