Control.Monad.Morph
bao gồmTại sao Control.Monad.Morph.hoist lại có ràng buộc Monad?
class MFunctor t where
hoist :: Monad m => (forall a. m a -> n a) -> t m b -> t n b
Theo như tôi có thể nói, không ai trong số các trường hợp bao gồm sử dụng Monad m
hạn chế. Làm thế nào có thể làm như vậy? Có trường hợp hợp lệ sử dụng các ràng buộc (đó là một chút khó khăn cho tôi để tưởng tượng như thế nào, cho rằng hoist id = id
)? Ý nghĩa của ràng buộc là gì trên m
và không phải là n
?
Tôi đã mong đợi điều gì đó đột nhập trong ['Control.Monad.Trans.Compose'] (https://hackage.haskell.org/package/mmorph-1.0.6/docs/Control-Monad-Trans-Compose. html), nhưng mọi thứ biên dịch tốt mà không có 'Monad m' trên' hoist' ... – Alec
Có lẽ vì nó chỉ có ý nghĩa đối với monads? Đó là một functor trên một biến áp monad (stack), như xa như tôi có thể nhìn thấy. – Xeo
@Alec 'Control.Monad.Trans.Compose' không có phiên bản' MFunctor'. – Cirdec