是否有一个具有函数 `(ma -> nb) -> tma -> tnb` 的类

Cli*_*ton 6 haskell monad-transformers

这是一堂课,我正在打电话BlahMap

class BlahMap t where
  blahMap :: (m a -> n b) -> t m a -> t n b
Run Code Online (Sandbox Code Playgroud)

这是一个实例BlahMap

instance BlahMap (ReaderT r) where
  blahMap f = ReaderT . fmap f . runReaderT
Run Code Online (Sandbox Code Playgroud)

Haskell 生态系统中是否有现有的类可以执行此操作?或者,我可以只blahMap用现有类mtl或类似的东西编写一个具有适当约束的函数吗?或者我真的发明了一些新东西吗?

Cli*_*ton 7

hoist类包中的MFunctor函数是mmorph我自己问题的答案。

  • 为了完全正确,“hoist”的类型为“(forall a.ma -> na) -> tmb -> tnb”,这并不完全是您在OP中所要求的。话虽这么说,“hoist”可能就是您正在寻找的东西,并且是一个“非常”有用的函数,所以我喜欢这个答案。只是值得注意的是,这些类型并不“完全”对齐。 (4认同)