Haskell do-block返回错误

时间:2015-03-11 22:50:26

标签: haskell

我有一个简单的功能:

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

但是我收到如下错误消息:

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

我的功能出了什么问题?

1 个答案:

答案 0 :(得分:4)

您的代码存在两个问题:

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

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

  2. <-的类型为return,因此,如果我们将Monad m => a -> m a的类型设为x,则Int的类型为return x。但根据您的类型签名,您只希望类型为Monad m => m Int,而不是Int。因此,您不应该使用m Int(或return - 符号表示。)

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

    do

    或者如果您想拥有本地f = 1

    x

    f =
      let x = 1 in
      x