类型:
data Command a = Command String (a -> IO a)
Run Code Online (Sandbox Code Playgroud)
功能:
iofunc :: String -> (a -> IO a) -> Command a
iofunc = Command
func :: String -> (a -> a) -> Command a
func s f = iofunc s (return . f)
Run Code Online (Sandbox Code Playgroud)
有人可以解释(return . f)类型检查的方式(a -> IO a)吗?
代码中没有模式匹配,所以我认为你的意思是"类型检查".
return . f是一个接受参数x并求值的函数return (f x).return有类型Monad m => a -> m a和f类型a -> a.因此,我们知道的类型f x相同的类型x和return (f x)随后的类型是m a其中a的类型x和m是一个单子.换句话说类型return . f就是Monad m => a -> m a,就像类型return本身.
第二个参数所需的类型iofunc是a -> IO a.因为IO是monad,它适合类型Monad m => a -> m a,因此return . f具有作为第二个参数传递的适当类型iofunc.因此代码类型检查.