[Haskell-cafe] ambiguous partially defined type problem
maarten at snowlion.nl
Thu Sep 14 10:20:46 EDT 2006
For a project involving I use some partially defined node (in this case
a simple record, in my project state transformers) in which the defined
part is common to all nodes, and the custom part is different for each
node. They have to become anonymous so I can put them in a list of
connections from each node to another.
For some reason GHC complains of 'ambigous type variable' in the code
below. The thing is, part of the code may be undefined, but since I'm
(explicitly) not using that part, why would GHC care? Are there other
solutions to this problem? Any pointers or comments appreciated. Thanks.
(This code is just some dummy code that contains the essence of the
problem. I posted the complete code with piggy bagged state transformers
in active objects on haskell at haskell.org, but that is rather long and
this seems to be the correct mailing list).
-- data structure with custom and common part
data Node cust = Node cust Common
-- anonymous data structure to put use in list
data AN = forall ar. (Show ar, Typeable ar) => AN ar
instance Show AN where
show (AN an) = "AN (" ++ show an ++ ")"
-- common part
data Common = Common Integer
data Custom = Custom Integer
data Custom2 = Custom2 Integer
-- extract common part, ignoring type of custom part
getCommon :: forall gc. (Node gc) -> Common
getCommon (Node cust com) = com
main = do
let a = AN (Node (Custom 5) (Common 10))
let b = case a of (AN a') -> getCommon (case (cast a') of Just a''
putStrLn $ "ok:" ++ show b
More information about the Haskell-Cafe