gpt4 book ai didi

haskell - 来自 Free 和 MonadFree 的箭头

转载 作者:行者123 更新时间:2023-12-02 03:43:01 25 4
gpt4 key购买 nike

如何从 FreeMonadFree 创建一个 Arrow

class (Functor f, Monad m) => MonadFree f m where ...

data Free f a = Impure (f (Free f a)) | Pure a

MonadFree 包含 2 个参数 mf ,但是 Kleisli 没有空间插入 f,所以我们不能为 MonadFree 使用 Kleisli 箭头。

据我了解,需要创建一个类、一个新类型和一个实例,如下所示:

class Arrow a => ArrowFunctor f a | a -> f where
afmap :: a b (f c)

newtype FKleisli f m a b = FKleisli { runFKleisli :: a -> f (m b) }

instance (Functor f, Monad m, MonadFree f m) =>
ArrowFunctor (FKleisli f m a) where ...

但看起来实现起来并不简单

最佳答案

如果 m'Monad 的实例,则 Kleisli m'Arrow 的实例(以及一些其他相关的类型类,例如 ArrowApply)。

在你的例子中,你想使用 FreeT f m 作为底层 monad(对于一些 Functor fMonad m),所以你只需将 m' 设置为 FreeT f m 即可得到您想要的:Kleisli (FreeT f m)

关于haskell - 来自 Free 和 MonadFree 的箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18932128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com