我需要一些关于(>> =)和(> =>)的澄清.
*Main Control.Monad> :type (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
*Main Control.Monad> :type (>=>)
(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c
Run Code Online (Sandbox Code Playgroud)
我知道bind运算符(>> =),但我没有得到(> =>)有用的上下文.请用简单的玩具例子说明.
编辑:根据@Thomas评论进行更正
目标:取一个字符串并在控制台中打印相同的东西,就像需要永远完成相同的操作一样
我提出了这样的事情,没有编译错误但没有按预期工作.
greet_buggy :: String -> IO ()
greet_buggy = forever $ putStrLn
Run Code Online (Sandbox Code Playgroud)
问题是在字符串下面没有在控制台中打印任何内容.
greet_buggy "something"
Run Code Online (Sandbox Code Playgroud)
基于这篇文章我尝试调试并更改了如下定义.它工作正常
greet :: IO ()
greet = forever $ putStrLn "Hello"
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这里发生的事情吗?是否有可能forever单独使用相同的效果?
编辑:找到一个相关的帖子(感谢@Daniel Wagner),即使通过这个问题与我的不同,答案解释一下forever.