A few months ago, there was a discussion here about defining Set to be a Monad, starting with:
[1] http://www.haskell.org/pipermail/haskell-cafe/2004-March/005988.html


in response to which, SPJ pointed out that a Set cannot be a Monad:
[2] http://www.haskell.org/pipermail/haskell-cafe/2004-March/005995.html

I found myself treading a path which led me to asking the same question as [1]. Given the answer [2], I'd like to stand back a little and ask if there's another way to tackle my niggle: what I'm interested in is a set comprehension expression that is analogous to a list comprehension expression; e.g. in:

[[
> import Data.Set
>
> type AtomicConcept = String   -- named atomic concept
> type AtomicRole    = String   -- named atomic role
>
> type AtomicConcepts a :: AtomicConcept -> (Set a)
> type AtomicRoles a    :: AtomicRole    -> (Set (a,a))
>
> type Interpretation a :: (Set a,AtomicConcepts a,AtomicRoles a)

...

> iAL (idom,ic,ir) (ALAll r c)  = mkSet [ a | (a,b) <- setToList (ir r)
>                                           , b `elementOf` ir c ]
]]

is there a common or similar idiom to achieve the same effect without converting the set to a list and back?

I did also find myself wondering if there was a role for unfold (or similar) here.

#g


------------ Graham Klyne For email: http://www.ninebynine.org/#Contact

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to