Haskell 函数“return”在我的代码中做什么?

Haskell 函数“return”在我的代码中做什么?,haskell,io,return,Haskell,Io,Return,类型: 职能: 有人能解释一下你是怎么回来的吗。f使用->IO a进行类型检查?您的代码中没有模式匹配,因此我假设您指的是类型检查 返回。f是一个函数,它接受一个参数x并计算返回fx。return的类型为Monad m=>a->ma,f的类型为a->a。因此,我们知道fx的类型与x的类型相同,返回fx的类型为ma,其中a是x的类型,m是单子。换句话说,返回的类型。f是Monad m=>a->ma,就像返回类型本身一样 iofunc的第二个参数所需的类型是a->IO a。由于IO是一个monad,

类型:

职能:


有人能解释一下你是怎么回来的吗。f使用->IO a进行类型检查?

您的代码中没有模式匹配,因此我假设您指的是类型检查

返回。f是一个函数,它接受一个参数x并计算返回fx。return的类型为Monad m=>a->ma,f的类型为a->a。因此,我们知道fx的类型与x的类型相同,返回fx的类型为ma,其中a是x的类型,m是单子。换句话说,返回的类型。f是Monad m=>a->ma,就像返回类型本身一样


iofunc的第二个参数所需的类型是a->IO a。由于IO是一个monad,它适合monad m=>a->ma类型,因此返回。f具有要作为第二个参数传递给iofunc的正确类型。因此,代码类型检查。

代码中没有模式匹配,因此我假设您指的是类型检查

返回。f是一个函数,它接受一个参数x并计算返回fx。return的类型为Monad m=>a->ma,f的类型为a->a。因此,我们知道fx的类型与x的类型相同,返回fx的类型为ma,其中a是x的类型,m是单子。换句话说,返回的类型。f是Monad m=>a->ma,就像返回类型本身一样


iofunc的第二个参数所需的类型是a->IO a。由于IO是一个monad,它适合monad m=>a->ma类型,因此返回。f具有要作为第二个参数传递给iofunc的正确类型。因此代码类型会检查。

我不知道模式匹配是什么意思,但在本例中,返回::a->IO a。请注意,f::a->a所以通过将其结果线程化为return或用f组合return,如果您愿意,我们从a->a转到a->IO a

我不知道模式匹配是什么意思,但在本例中,返回::a->IO a。请注意,f::a->a所以通过将其结果线程化为return或用f组合return,如果您愿意,我们从a->a转到a->IO a

为什么不返回。f必须是IO单子而不是任何单子?@Michiel monad m=>a->ma意味着它可以生成任何你想要的单子。所以,如果你需要IO,它会给你一个IO,如果你需要其他东西,它会给你其他东西。就像你可以将类型为Num a=>a的42传递给一个需要Int的函数一样,你也可以将它传递给一个需要整数或双精度的函数。谢谢你的解释。为什么不返回呢。f必须是IO单子而不是任何单子?@Michiel monad m=>a->ma意味着它可以生成任何你想要的单子。所以,如果你需要IO,它会给你一个IO,如果你需要其他东西,它会给你其他东西。就像你可以把类型为Num a=>a的42传递给一个需要Int的函数一样,你也可以把它传递给一个需要整数或双精度的函数,谢谢你的解释。
data Command a = Command String (a -> IO a)
iofunc :: String -> (a -> IO a) -> Command a
iofunc = Command

func :: String -> (a -> a) -> Command a
func s f = iofunc s (return . f)