Just to keep you updated,

Ok so the design was bad ... a table of elements 'a' will have indexes that hold elements of the same type 'a' so the list of indexes can be [dbIndex a]..

There's was still one polymorphism issue :

data DbIndex a =
       DbIndex {dbiInsert :: Row a -> Maybe (DbIndex a),
                dbiDelete :: Row a -> DbIndex a,
                dbiFindWithKey :: Dynamic -> Maybe [Row a]}

indexDelete DbIndex{dbiDelete=delete} row = delete row
indexInsert DbIndex{dbiInsert=insert} row = insert row

findWithKey :: forall a k. (Typeable k) => (DbIndex a) -> k -> Maybe [Row a]
findWithKey DbIndex{dbiFindWithKey=find} key = find $ toDyn key

As far as i understand it, there is absolutely no way for the key in findWithKey to be fully typed while still having the indexes in the same list, so i took the given advice and used dynamics.

I guess this is poor style but it does the job !

Thanks again
Sacha

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to