关于 Haskell/HappStack 中语法和类型签名的新手问题

发布于 2024-11-07 07:25:50 字数 633 浏览 5 评论 0原文

为什么我做不到,

z = x?

但我却能做到这一点?

y s = x s

我是哈斯克尔新手 这是我在 GHCi 中一直在尝试的:

Prelude> import Happstack.Server
Prelude Happstack.Server> let x s = ok $ toResponse $ "Some string"
Prelude Happstack.Server> :t x
x :: FilterMonad Response m => t -> m Response

Prelude Happstack.Server> let y s = x s
Prelude Happstack.Server> :t y
y :: FilterMonad Response m => t -> m Response

Prelude Happstack.Server> let z = x
<interactive>:1:9:
    No instance for (FilterMonad Response m0)
      arising from a use of `x'

Why is it that I can't do

z = x?

but I can do this?

y s = x s

I'm a Haskell newbie
This is what I've been trying in GHCi:

Prelude> import Happstack.Server
Prelude Happstack.Server> let x s = ok $ toResponse $ "Some string"
Prelude Happstack.Server> :t x
x :: FilterMonad Response m => t -> m Response

Prelude Happstack.Server> let y s = x s
Prelude Happstack.Server> :t y
y :: FilterMonad Response m => t -> m Response

Prelude Happstack.Server> let z = x
<interactive>:1:9:
    No instance for (FilterMonad Response m0)
      arising from a use of `x'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乙白 2024-11-14 07:25:50

看起来像是单态限制的另一种情况。

您可以显式包含参数,即 ys = x s,包含显式类型签名,或者使用 -XNoMonomorphismRestriction 运行 GHCi。

Looks like another case of the monomorphism restriction.

You can either include the argument explicitly, i.e. y s = x s, include an explicit type signature, or run GHCi with -XNoMonomorphismRestriction.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文