id,summary,reporter,owner,description,type,status,priority,milestone,version,resolution,keywords,cc
15,Events don't hold monad laws,camio,,"{{{
m :: EventG X String
m = listToEvent [future 1 ""m0""]

f,g :: String -> EventG X String
f = const $ listToEvent [ future 0 ""f0""
                        , future 0 ""f1""
                        ]
g = const $ listToEvent [ future 0 ""g0""
                        , future 1 ""g1""
                        ]

a = (m >>= f) >>= g
-- ((1,m0) >>= f) >>= g
-- [(1,f0), (1,f1)] >>= g
-- [(1,g0), (1,g1), (1,g0), (1,g1)]

b = m >>= (\x -> f x >>= g)
-- m >>= (\x -> f x >>= g)
-- m >>= ([(0,f0), (0,f1)] >>= g)
-- m >>= [(0,g0), (0,g0), (1,g1), (1,g1)]
-- [(1,g0), (1,g0), (1,g1), (1,g1)]
}}}

Beneath a and b is a calculation of the result in the semantic domain. This serves as a counter example of the assertion that joinE as defined in section 2.2.3 of the paper forms a monad with the rest of the things (list equality, fmap, etc.).",defect,new,major,,,,,
