On Apr 12, 2006, at 3:18 PM, Scott Weeks wrote:
Well, if you get an "ambiguous type variable" error, you probably (I
think) need to add some type annotations. For example:
class Foo a where
foo :: a
bar :: a -> String
Evaluating bar foo will result in an error, but bar (foo :: Integer)
will work just fine.
____________________
The problem is that I get an incoming value which is a key of some
sort. There's no way of knowing what type that value is supposed to
be until I compare it with the schema from the above example. where
I _am_ adding type annotations.
coerceIndex f (Schema _ SInt SPtr _) (r,hdl,o,hdr) = f
(r::IdxInt,hdl,o,hdr)
coerceIndex f (Schema _ SStr SPtr _) (r,hdl,o,hdr) = f
(r::IdxPS,hdl,o,hdr)
When I try to add type annotations I get a complaint from the
typechecker that says (In the case of the above example) Expected
type: Integer, Inferred Type: PackedString.
Is the alternative to write different "select" methods for each key
type (selectInt, selectPS, ...)? God I hope not, that would be a
bit scary.
I'm not 100% sure I understand your use case, but I think you might
be able to crack this by using Data.Dynamic:
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-
Dynamic.html
Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
-- TMBG
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe