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