fork download
  1. {-
  2. Laws:
  3.   * zero .?. _ = False
  4.   * (fs .+. f) .?. f = True
  5.   * (fs .-. f) .?. f = False
  6.   * flag _ /= zero
  7. -}
  8. class FlagCarrier c where
  9. (.?.) :: (Enum f) => c f -> f -> Bool
  10. (.+.) :: (Enum f) => c f -> f -> c f
  11. (.-.) :: (Enum f) => c f -> f -> c f
  12. flag :: (Enum f) => f -> c f
  13. zero :: (Enum f) => c f
  14.  
  15. instance FlagCarrier BitCarrier where
  16. (M m) .?. f = testBit m (repr f)
  17. (M m) .+. f = M $ setBit m (repr f)
  18. (M m) .-. f = M $ clearBit m (repr f)
  19. flag f = M $ bit (repr f)
  20. zero = M 0
  21.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty