"没有实例"错误 - 但实例存在(种类不匹配)

rob*_*ert 5 haskell

我从ghc为我的仆人库得到以下错误:

No instance for (GetEndpoint
                       (Verb 'GET 200 '[JSON] Position)
                       (Verb 'GET 200 '[JSON] Position)
                       'True)
arising from a use of `callServer3'
Run Code Online (Sandbox Code Playgroud)

但我在范围内有一个实例,看起来像这样:

instance GetEndpoint (Verb n s ct a) (Verb n s ct a) 'True where
  getEndpoint _ _ _ _ server = server
Run Code Online (Sandbox Code Playgroud)

看起来就像一个ghc找不到的.我现在有点困惑.

完整代码可以在这里找到:

有线索吗?非常感谢任何提示!

rob*_*ert 5

给定的实例对于ns ct和a具有默认类型'*'.要么使用多种类型的n或正确的具体种类:

(Verb (n :: k1) (s :: Nat) (ct :: [*]) a)
Run Code Online (Sandbox Code Playgroud)

正确的实例如下所示:

instance GetEndpoint (Verb (n :: k1) (s :: Nat) (ct :: [*]) a) (Verb n s ct a) 'True where
  getEndpoint _ _ _ _ server = server
Run Code Online (Sandbox Code Playgroud)

如果你不想启用PolyKinds(它引入了一堆其他错误),你可以使用StdMethodn 更多限制:

instance GetEndpoint (Verb (n :: StdMethod) (s :: Nat) (ct :: [*]) a) (Verb n s ct a) 'True where
  getEndpoint _ _ _ _ server = server
Run Code Online (Sandbox Code Playgroud)

可在此处找到完整代码(编译甚至按预期工作).

再次感谢Carsten的快速帮助!