无法弄清楚我在寻找什么 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
我以为是 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