无法弄清楚我在寻找什么 monad 函数

Can't figure out what monad function I'm looking for

我以为是 liftM 但类型签名似乎不对。我希望有这样的功能:

 someFunc :: Monad m => (a -> b) -> a -> m b
 someFunc f = return . f

我知道我可以用上面的代码定义它,但我的直觉告诉我它必须已经存在而且我只是出于某种原因没有看到它。

例如:

main = do
    n_tmp <- getLine
    let n = read n_tmp :: Int

main = do
    getLine >>= someFunc read :: IO Int

或者我只是做错了可怕的事情?

在这种情况下,我只使用 fmap....

main = do
    n <- fmap read getLine
    ....

半开玩笑地说,您正在寻找 (return.)(.)return 函数的简单部分应用。对于可能分配给它的任何合理名称,几乎不需要更多的输入:

someFunc :: Monad m => (a -> b) -> a -> m b
someFunc = (return.)
-- or someFunc = (.)return

比较

getLine >>= someFunc read :: IO Int
getLine >>= return.read :: IO Int