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