Gabriel Gonzalez 在他的博客文章中描述了一种使用免费 monad 净化代码的方法。假设我们有FreeMonadIO a
,那么我们可以编写不同的解释器,例如,一种用于测试目的,一种用于实际 IO。
我想知道是否可以为Arrows
. 之类的东西FreeArrowIO a b
,这将是具有副作用和显式输入的计算的纯粹表示,然后可以以不同的方式解释(其中之一是 IO)。
我知道我可以写类似的东西FreeArrowIO = Kleisli FreeMonadIO
,但是有没有办法跳过 monad 步骤并直接定义 FreeArrowIO?