我有一个Foo
拥有一个函数的类gen :: Int -> [Foo]
。例如,我可以制作一个这样的实例Foo
:
data FooTest = FooTest Int
instance Foo FooTest where
gen n = replicate n (FooTest 0)
现在,让我们假设我有另一个Bar
定义了 function 的类bar :: Bar -> IO ()
。的每个实例Foo
都必须是 的实例Bar
,但每个实例的Bar
实现都完全相同。这是一个例子:
class Foo f where
gen :: Int -> [f]
class Bar b where
bar :: b -> IO ()
instance Bar Foo where -- obviously that doesn’t work
bar _ = putStrLn "bar through any Foo instance"
instance (Foo f) => Bar f where -- this needs the FlexibleInstance GHC extension first, then it still throws shit saying that the constraint is not smaller that I don’t shit
bar _ = putStrLn "bar through any Foo instance"
这里的问题是我找不到任何方法让一个类成为另一个类的实例,以提及第一个类的任何实例都将共享相同的实现来实例化另一个类。
任何想法?
提前致谢。