
Am Donnerstag 17 September 2009 15:40:10 schrieb Andy Gimblett:
instance (Enumerated a) => Target a where convert n | n `elem` [0..len-1] = Just $ constructors !! n
| otherwise = Nothing
where len = length constructors
Yes, the second appearance of 'constructors' is at an unspecified type. instance (Enumerated a) => Target a where convert n | n < 0 = Nothing | otherwise = case drop n constructors of (x:_) -> Just x _ -> Nothing would make it compile. But there'd be a risk that Target is unusable, depending on how instance resolution is done.
I guess I see roughly what's going on; the question is "which constructors instance is meant?", right? In the "Just" part it's OK, because it can be inferred from the function's return type (right?). But in the guard we don't have that help, so it could be any Enumerated instance?
Exactly.
Any advice appreciated! Particularly if this is just a dumb approach. For context, this is related to deserialisation of binary data (they'll actually be Word8's, not Int's) into a variety of data structures.
Hmmm, maybe I should just be using Data.Binary...
Many thanks,
-Andy