infixl 6 :?
infixl 7 :+
infixl 7 :-
{-
Laws:
1. zero :? _ = False
2. flag f :? f = True
3. fs :+ f :? f = True
4. fs :- f :? f = False
5. fs :+ f :- f = fs
-}
class Enum a
=> Flags c
where zero :: c a
flag :: a -> c a
(:+) :: c a -> a -> c a
(:-) :: c a -> a -> c a
aW5maXhsIDYgOj8KaW5maXhsIDcgOisKaW5maXhsIDcgOi0KCnstCkxhd3M6CjEuIHplcm8gOj8gXyA9IEZhbHNlCjIuIGZsYWcgZiA6PyBmID0gVHJ1ZQozLiBmcyA6KyBmIDo/IGYgPSBUcnVlCjQuIGZzIDotIGYgOj8gZiA9IEZhbHNlCjUuIGZzIDorIGYgOi0gZiA9IGZzCi19CmNsYXNzIEVudW0gYSA9PiBGbGFncyBjIHdoZXJlCiAgICB6ZXJvIDo6IGMgYQogICAgZmxhZyA6OiBhIC0+IGMgYQogICAgKDo/KSA6OiBjIGEgLT4gYSAtPiBCb29sCiAgICAoOispIDo6IGMgYSAtPiBhIC0+IGMgYQogICAgKDotKSA6OiBjIGEgLT4gYSAtPiBjIGEK