功能"返回"在我的代码中做了什么?

Sta*_*nko 1 io haskell return

类型:

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)吗?

sep*_*p2k 6

代码中没有模式匹配,所以我认为你的意思是"类型检查".

return . f是一个接受参数x并求值的函数return (f x).return有类型Monad m => a -> m af类型a -> a.因此,我们知道的类型f x相同的类型xreturn (f x)随后的类型是m a其中a的类型xm是一个单子.换句话说类型return . f就是Monad m => a -> m a,就像类型return本身.

第二个参数所需的类型iofunca -> IO a.因为IO是monad,它适合类型Monad m => a -> m a,因此return . f具有作为第二个参数传递的适当类型iofunc.因此代码类型检查.