Monads的部分升降机?

ant*_*ter 1 haskell lifting

对于monad来说,有什么像部分升降机吗?我需要类型签名是这样的:

Monad m => (a1 -> r) -> a1 -> m r
Run Code Online (Sandbox Code Playgroud)

而不是这个:

Monad m => (a1 -> r) -> m a1 -> m r
Run Code Online (Sandbox Code Playgroud)

用于>=>和其他原因.我正在寻找上述做法的规范方式.

Ant*_*sky 8

这只是(return .):您需要做的就是将函数的返回值注入m,return完成.通常,这只是内联,return . freturn $ f x,或在哪里f :: a -> r; 我从未见过这个定义.

(另外,现在,可能会有(pure .)更普遍的类型Applicative f => (a -> r) -> a -> f r.)

  • @gyeh,不,不是我见过的.在Haskell中它很方便,不值得为它起个好名字. (2认同)