Following the declaration of "instance Monad []"
in the prelude, and puzzling over the absence of
its equivalent from Data.Set, I naively typed:

   instance Monad Set where
        m >>= k = concatSets (mapSet k m)
        return x = unitSet x
        fail s = emptySet

   concatSets sets = foldl union emptySet (setToList sets)
   instance (Eq b,Ord b) => Ord (Set b) where
        compare set1 set2 = compare (setToList set1) (setToList set2)

and got the following error:

    Could not deduce (Ord b) from the context (Monad Set)
      arising from use of `concatSets' at dbMeta3.hs:242
    Probable fix:
        Add (Ord b) to the class or instance method `>>='
    In the definition of `>>=': >>= m k = concatSets (mapSet k m)
    In the definition for method `>>='
    In the instance declaration for `Monad Set'

Since I obviously can't modify the class
declaration for Monad, the question arises:

   How does one add (Orb b) to the instance method '>>='?

(Aside: it be really nice if the error messages
suggested textual changes or at least provide
sample syntax in addition to the conceptual
recommendation.)

-Alex-

PS I assume the reason that Set is not declared as
a Monad in Data.Set is oversight rather than
incompatibility....

PPS I want to thank everyone who has been
taking the time to answer all of my questions.
I'll try to collect my various learnings into a
useful beginners page once I reach the point where
I think I can create a useful document.

_________________________________________________________________
S. Alexander Jacobson                  mailto:[EMAIL PROTECTED]
tel:917-770-6565                       http://alexjacobson.com
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to