通过Free Monad和Coproduct自动选择译员

时间:2015-03-08 02:52:55

标签: scala haskell monads

我正在使用app架构和haskell中的免费monad。我把它搞定了,除了如何解除我的指令"进入我的副产品的正确插槽,而没有明确给出完整的左/右路径。

以下是我一直在工作的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

手动将记录器放入副产品的右侧插槽中 在Scala中使用隐式类型转换和Inject类型类来实现此结果:https://gist.github.com/runarorama/a8fab38e473fafa0921d#file-gistfile1-scala-L119

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

1 个答案:

答案 0 :(得分:1)

将评论中的答案部分填写到原始问题中......

原始的Haskell论文可以在这里找到:Data Types à la Carte

可以在此处找到Haskell实现:ALaCarte.hs