我有以下方案的代码:
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 ×1