Jeff φ wrote:
> However, my implementation of SmartArray requires me to create an instance
> of a selector class to tell the compiler whether the type is boxed or
> unboxed. I'm hoping to avoid creating instances of the selector class for
> every possible type. I'd be grateful for any suggestions.
Using ghc-6.8.2 I get
test.hs:30:0:
Functional dependencies conflict between instance declarations:
instance [overlap ok] SmartArraySelector UArray Bool
-- Defined at test.hs:30:0-46
instance [overlap ok] SmartArraySelector Array e
-- Defined at test.hs:49:0-40
[more of the same for the other classes omitted]
The offending lines are
instance SmartArraySelector UArray Bool where
vs.
instance SmartArraySelector Array e where
Note that it explicitly says 'overlap ok' but the functional dependencies
cannot be fulfilled. You defined
class (IArray a e) => SmartArraySelector a e | e -> a
Your generic instance says that it determines the 'a' type for /all/
types 'e' as 'Array'. This conflicts with the other instance which says it
determines the 'a' for the specific type 'Bool' as 'UArray'.
That leaves the question how to achieve what you want, for which
unfortunately I have no answer.
Cheers
Ben