
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