对于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)
用于>=>和其他原因.我正在寻找上述做法的规范方式.
这只是(return .):您需要做的就是将函数的返回值注入m,return完成.通常,这只是内联,return . f或return $ f x,或在哪里f :: a -> r; 我从未见过这个定义.
(另外,现在,可能会有(pure .)更普遍的类型Applicative f => (a -> r) -> a -> f r.)