小编spo*_*iku的帖子

Haskell:在另一个实例中使用一个类

我有以下方案的代码:

class First s where
  func1 :: s -> s
class Second a where
  func2 :: s -> a s

data D s = D {value :: s}
myFunc2 :: First s => s -> D s
myFunc2 = undefined
Run Code Online (Sandbox Code Playgroud)

通常,func2的参数不能是First的实例.我想在它的值为第一个实例的情况下制作第二个D实例.然后我想得到这个实例:

instance Second D where
  func2 = myFunc2
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

No instance for (First s)
  arising from a use of `myFunc2'
Run Code Online (Sandbox Code Playgroud)

好吧,让实例是:

instance First s => Second D where
  func2 = myFunc2
Run Code Online (Sandbox Code Playgroud)

但这会给出错误:

Ambiguous constraint `First s'
  At least one of …
Run Code Online (Sandbox Code Playgroud)

haskell

4
推荐指数
2
解决办法
180
查看次数

标签 统计

haskell ×1