
Phlex schrieb:
I have this class which gives a common interface to (UniqueIndex a k) and (MultiIndex a k) :
I do not understand this
class (Show a, Key_ k) => Index_ i a k | i -> k, k -> a where buildKey :: (a -> k)
this method "buildKey" is not sufficient to derive the type "i" in an application ("i" determines "k" but not vice versa) [...]
Now i need to have these indexes in a list, so i declared that type :
data DbIndex = forall a k i. (Show a, Key_ k, Index_ i a k) => DbIndex i
data DbIndex = forall a k i. (Index_ i a k) => DbIndex i should do as well.
for instance, this doesn't work: liftDbIndex (DbIndex index) fun = DbIndex (fun index)
you can apply only a method of Index_ to index.
this doesn't work either : dbIndexBuildKey (DbIndex index) value = (buildKey index) value
buildKey's type is not sufficient (see above)
How can i access the enclosed concrete index, via its Index_ class ?
Add corresponding methods to the class. (Alternatively or additionally store an index as a dynamic value.) HTH Christian