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

Din*_*uek 4 haskell happstack

为什么我不能这样做

z = x?
Run Code Online (Sandbox Code Playgroud)

但我可以这样做吗?

y s = x s
Run Code Online (Sandbox Code Playgroud)

我是Haskell新手这是我在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'
Run Code Online (Sandbox Code Playgroud)

ham*_*mar 5

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

您可以显式包含参数,即y s = x s包含显式类型签名,或运行GHCi -XNoMonomorphismRestriction.