3
如何从Free
和MonadFree
创建Arrow
?来自Free和MonadFree的箭头
class (Functor f, Monad m) => MonadFree f m where ...
data Free f a = Impure (f (Free f a)) | Pure a
MonadFree包含2个参数m
和f
,但Kleisli
没有空间插入f
,所以我们不能用Kleisli
箭头,MonadFree
。
据我了解,它是需要创建一个类,一个NEWTYPE和实例,像这样的:
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 ...
但它看起来像执行不繁琐
你试过'Kleisli(FreeT f m)'吗? –
不错!我会试试看! – wit
@SjoerdVisscher你想写这个答案吗? – AndrewC