[Haskell-cafe] where do I point the type annotations
Alex Jacobson
alex at alexjacobson.com
Fri May 18 02:39:48 EDT 2007
I am playing with using SYB to make generic indexed collections. The
current code is this:
data Syb = Syb [Dynamic] -- list of [Map val (Set a)]
empty item = Syb $ gmapQ (toDyn . emp item) item
where
emp::x->y->Map.Map y (Set.Set x)
emp x y = Map.empty
insert x (Syb indices) = Syb $ zipWith f indices (gmapQ toDyn x)
where
f dynIndex dynAttr = toDyn $ Map.insert attr
(maybe (Set.singleton x) (Set.insert x) $
Map.lookup attr index) index
where
index = fromJust $ fromDynamic dynIndex
attr = fromJust $ fromDynamic dynAttr
e = empty i where i=i::Test
t1 = Test "foo" 2
c1 = insert t1 e
Which causes the following error (the line numbers are wrong because
there was other code in the original):
Ambiguous type variable `a' in the constraints:
`Ord a' arising from use of `insert' at Main.hs:113:5-15
`Typeable a' arising from use of `insert' at Main.hs:113:5-15
Probable fix: add a type signature that fixes these type variable(s)
What am I doing wrong? Is there a better way to define insert that does
not have this problem?
Note: I also tried doing this so that each attribute tried to find a
matching index using fromDynamic, but that gave me an error involving
gmapQ not have an Ord constraint.
-Alex-
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070518/8aad472f/attachment.htm
More information about the Haskell-Cafe
mailing list