哈斯克尔做块返回错误



我有一个简单的函数:

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

但是我收到一条错误消息,如下所示:

 Couldn't match type ‘m0 b0’ with ‘Int’

我的函数出了什么问题?

你的代码有两个问题:

  1. <-的右侧必须具有类型 m a其中 a 是任意类型(然后成为左侧的类型),m是 do-block 所属的 monad。在您的情况下,右侧的类型是 1 ,它没有该类型。

    如果只想将一个值绑定到x,则需要使用 let x = 1 ,而不是 <-

  2. return的类型是Monad m => a -> m a,所以如果我们取Int x的类型,return x的类型是Monad m => m Int。但是根据您的类型签名,您只希望类型是Int,而不是m Int。因此,您不应该使用return(或为此do -notation)。

编写

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

f = 1

或者如果您想拥有本地x

f =
  let x = 1 in
  x

f = x
  where x = 1

最新更新