
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Dan, Thanks for your help. On Tuesday 04 September 2001 05:27 pm, Daan Leijen wrote:
Unfortunately, you don't show the type error that was returned.
It was a bit long. Anyway, here it is: Hypergraph> elementOf (mkSet [1]) (hgraph [ [1,2], [1] ]) <no file>:0: No instance for `Ord (Set a)' arising from use of `hgraph' at <no file>:0 In the second argument of `elementOf', namely `(hgraph [[1, 2], [1]])' in the definition of function `it': elementOf (mkSet [1]) (hgraph [[1, 2], [1]]) <no file>:0: Ambiguous type variable(s) `a' in the constraint `Ord a' arising from use of `hgraph' at <no file>:0 In the second argument of `elementOf', namely `(hgraph [[1, 2], [1]])' in the definition of function `it': elementOf (mkSet [1]) (hgraph [[1, 2], [1]]) <no file>:0: Ambiguous type variable(s) `a' in the constraint `Num a' arising from the literal `1' at <no file>:0 In the list element: 1 In the list element: [1] Okay, I guess I got it now. The (types of) elements of a Set ought to be instances of Ord. So I presume Edison supports only flat sets. So, this is not really a mathematical set, whichever set theory you take to be correct :) I guess a roughly working and more-efficient-than-list set type would be very useful for mathematicians and computer scientists. And writing one turns out to be extremely difficult, which set theory should one take? :) I particularly like the hyperset formulation, but then implementing hypergraphs might be a little circular. :))
However, I think that Hugs/GHCi is unable to figure out which numeric (Num a) instance you are using (Int,Integer, Double??). You can help the interpreter a little bit by
providing a type annotation:
elementOf (mkSet [(1::Int)]) (hgraph [ [1,2], [1] ])
or a constant with a type signature
list1 :: [Int] list1 = [1]
test = elementOf (mkSet list1) (hgraph [ [1,2], [1] ])
Hypergraph> elementOf (mkSet [(1::Int)]) (hgraph [ [1,2], [1] ])
<no file>:0:
No instance for `Ord (Set Int)'
arising from use of `hgraph' at <no file>:0
In the second argument of `elementOf', namely
`(hgraph [[1, 2], [1]])'
in the definition of function `it':
elementOf (mkSet [(1 :: Int)]) (hgraph [[1, 2], [1]])
This does reduce the errors, but I guess this is just something that Edison
is not up to (yet).
I'm afraid I'll have to mimic the common imperative hypergraph
representation, which means some more work for me :)
Thanks,
- --
Eray Ozkural (exa)