通过免费Monad和Coproduct自动选择口译员



我在哈斯克尔玩应用程序架构和免费 monads。我已经记下了,除了如何在没有明确给出完整的左/右路径的情况下将我的"指令"提升到我的副产品的正确插槽中。

这是我一直在使用的 haskell 示例:https://gist.github.com/aaronlevin/87465696ba6c554bc72b#file-reasonable-hs

在这里,为了将类型注入到联积中,我们明确提到了路径。

例如:

Program :: Coproduct Interaction (Coproduct Auth Logging) a
logC :: (Functor f) => (forall a. Logging a -> f a) -> String -> Free f ()
logger :: String -> Free Program ()
logger = logC (Program . Coproduct . Right . Coproduct . Right)

在这里,记录器必须手动放入共生产品的正确插槽中,并Coproduct . Right . Coproduct . Right

Runar在scala中的演讲使用隐式类型转换和Inject类型类来实现这个结果: https://gist.github.com/runarorama/a8fab38e473fafa0921d#file-gistfile1-scala-L119

简而言之,我想知道是否有办法在哈斯克尔做到这一点。

填写从

评论到原始问题的答案部分...

Haskell的原始论文可以在这里找到:数据类型à la Carte

Haskell的实现可以在这里找到:ALaCarte.hs

最新更新