如果我有以下两个 Kleisli 箭头:
stdoutProcessA :: Kleisli Maybe String (IO String)
writeToFileA :: Kleisli Maybe (FilePath, String) (IO ())
我希望能够写出类似的东西:
compile = proc src -> do
output <- stdoutProcessA -< "..."
writeToFileA -< ("...", output)
...
这当然行不通,因为String
不匹配IO String
. 另一方面,可以同时定义stdoutProcessA
和定义writeToFileA
type Kleisli IO ...
,但是我将无法用 type 的箭头组合它们Kleisli Maybe ...
,这是我需要的其他事情。
我对箭头还不是很有经验,所以我可能遗漏了一些明显的东西。如何进行上述操作?