Haskell do块返回错误

Haskell do块返回错误,haskell,Haskell,我有一个简单的功能: func :: Int func = do x <- 1 return x 我的函数有什么问题?您的代码有两个问题: ma的右侧,因此如果我们将x的类型设为Int,则返回x的类型为Monad m=>m Int。但是根据您的类型签名,您只希望类型是Int,而不是mint。因此,您不应该使用return(或do-表示法) 编写您试图编写的定义的正确方法是: f = 1 或者如果您想要一个本地x f = let x = 1 in x 或 的右侧您是否

我有一个简单的功能:

func :: Int
func = do
  x <- 1
  return x

我的函数有什么问题?

您的代码有两个问题:

  • ma
    的右侧,因此如果我们将
    x
    的类型设为
    Int
    ,则
    返回x
    的类型为
    Monad m=>m Int
    。但是根据您的类型签名,您只希望类型是
    Int
    ,而不是
    mint
    。因此,您不应该使用
    return
    (或
    do
    -表示法)

  • 编写您试图编写的定义的正确方法是:

    f = 1
    
    或者如果您想要一个本地
    x

    f =
      let x = 1 in
      x
    


    的右侧您是否知道您可能想要的可以简单地写为
    func=1
    func=do x@JaredSimpson,您提出的“解决方案”有错误:1。它不进行类型检查,因为
    func
    的类型是
    ::Int
    ,请注意
    Int
    不在单子中。2.如果它是在单子中,将
    1
    从单子中取出,然后用另一个返回值重新插入它是没有意义的,我们将执行
    func=return 1
    。您是否尝试过可用的Haskell教程?我建议从这个开始;这类问题并不适合这样做。
    f =
      let x = 1 in
      x
    
    f = x
      where x = 1