packages feed

bitmasks 0 → 0.0.1

raw patch · 7 files changed

+48/−19 lines, 7 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Bitmask: addFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag
- Data.Bitmask: addFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag
- Data.Bitmask.Internal: instance forall w k (flag :: k). GHC.Bits.Bits w => GHC.Bits.Bits (Data.Bitmask.Internal.Bitmask w flag)
- Data.Bitmask.Internal: instance forall w k (flag :: k). GHC.Show.Show w => GHC.Show.Show (Data.Bitmask.Internal.Bitmask w flag)
+ Data.Bitmask: infixl 5 .|.
+ Data.Bitmask: infixl 6 `xor`
+ Data.Bitmask: infixl 7 .&.
+ Data.Bitmask: insertFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag
+ Data.Bitmask: insertFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag
+ Data.Bitmask.Internal: insertFlag :: (Bits w, Enum flag) => flag -> Bitmask w flag -> Bitmask w flag
+ Data.Bitmask.Internal: insertFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag -> Bitmask w flag
+ Data.Bitmask.Internal: instance forall w k (flag :: k). GHC.Internal.Bits.Bits w => GHC.Internal.Bits.Bits (Data.Bitmask.Internal.Bitmask w flag)
+ Data.Bitmask.Internal: instance forall w k (flag :: k). GHC.Internal.Show.Show w => GHC.Internal.Show.Show (Data.Bitmask.Internal.Bitmask w flag)

Files

CHANGELOG.md view
@@ -10,3 +10,7 @@ ## 0 - 2025-09-17
 
 * Bitmask data types with API and tests.
+
+## 0.0.1 - 2026-03-09
+
+* Rename addFlag -> insertFlag.
README.md view
@@ -1,7 +1,14 @@ # Bitmasks
 
-Bitmasks for boolean flags.
+[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/AliceRixte/bitmasks/LICENSE) [![Hackage](https://img.shields.io/hackage/v/bitmasks.svg)](https://hackage.haskell.org/package/bitmasks) [![Nightly](https://www.stackage.org/package/bitmasks/badge/nightly)](https://www.stackage.org/nightly/package/bitmasks) [![LTS](https://www.stackage.org/package/bitmasks/badge/lts)](https://www.stackage.org/lts/package/bitmasks)
 
+
+Bitmasks for efficient storing of boolean flags.
+
+## Alternatives
+
+You might prefer the [bitset](https://hackage.haskell.org/package/bitset) package, that uses a similar implementation to this library. The main difference between `bitset` and `bitmasks` is that, contrarily to `bitset`, `bitmasks` is intended to be imported non qualified.
+
 ## Usage
 
 Define your flags as an enumeration:
@@ -59,7 +66,7 @@ >>> getFlag Ham veggieHawaiian
 ```
 
-Toggle (I have no idea what I'm talking about) the toppings :
+Toggle the toppinsertFlages, topping toggling should be a thing):
 
 ```haskell
 >>> funghi = flipFlags [Pineapple, Mushroom] veggieHawaiian
bitmasks.cabal view
@@ -1,11 +1,11 @@ cabal-version: 2.2
 --- This file has been generated from package.yaml by hpack version 0.37.0.+-- This file has been generated from package.yaml by hpack version 0.39.1. -- -- see: https://github.com/sol/hpack  name:           bitmasks-version:        0+version:        0.0.1 synopsis:       Bitmasks for efficient storing of boolean flags description:    Please see the README on GitHub at <https://github.com/AliceRixte/bitmasks#readme> category:       data@@ -39,7 +39,7 @@   ghc-options: -Wall -threaded   build-depends:       base >=4.18 && <5-  default-language: Haskell2010+  default-language: GHC2024  test-suite bitmasks-test   type: exitcode-stdio-1.0@@ -58,4 +58,4 @@     , base >=4.18 && <5     , bitmasks     , hspec >=2.11-  default-language: Haskell2010+  default-language: GHC2024
src/Data/Bitmask.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE GHC2021#-}
-
 --------------------------------------------------------------------------------
 -- |
 --
@@ -39,8 +37,8 @@   , getFlag
   , getFlags
   -- ** Flag modification
-  , addFlag
-  , addFlags
+  , insertFlag
+  , insertFlags
   , deleteFlag
   , deleteFlags
   , flipFlag
src/Data/Bitmask/Internal.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE GHC2021#-}
-
 --------------------------------------------------------------------------------
 -- |
 --
@@ -52,6 +50,8 @@   , getFlag
   , getFlags
   -- ** Flag modification
+  , insertFlag
+  , insertFlags
   , addFlag
   , addFlags
   , deleteFlag
@@ -88,7 +88,7 @@ --  | Ham
 --  deriving (Show, Eq, Bounded, Enum)
 --
---  type PizzaMask = Bitmask8 PizzaTopping Word8
+--  type PizzaMask = Bitmask Word8 PizzaTopping
 -- @
 --
 newtype Bitmask w flag = Bitmask w
@@ -142,7 +142,7 @@ -- >>> hawaiian = fromFlags [Pineapple, Ham, Cheese] :: PizzaMask
 --
 fromFlags :: (Bits w, Enum flag) => [flag] -> Bitmask w flag
-fromFlags = foldr addFlag noFlag
+fromFlags = foldr insertFlag noFlag
 
 -- | Convert a bitmask to a list of flags that are set to 'True'.
 --
@@ -219,6 +219,8 @@   flag -> Bitmask w flag -> Bitmask w flag
 addFlag f = setFlag f True
 
+{-# DEPRECATED addFlag "Use insertFlag instead." #-}
+
 -- | Add multiple flags to a bitmask (set them to 'True').
 --
 -- >>> hawaiian = addFlags [Pineapple, Ham] margherita
@@ -226,6 +228,24 @@ addFlags :: (Bits w, Enum flag)
   => [flag] -> Bitmask w flag -> Bitmask w flag
 addFlags fs bm = foldr addFlag bm fs
+
+{-# DEPRECATED addFlags "Use insertFlags instead." #-}
+
+-- | Add a flag to a bitmask (set it to 'True').
+--
+-- >>> margherita = insertFlag Cheese (noFlag :: PizzaMask)
+--
+insertFlag :: (Bits w, Enum flag) =>
+  flag -> Bitmask w flag -> Bitmask w flag
+insertFlag f = setFlag f True
+
+-- | Add multiple flags to a bitmask (set them to 'True').
+--
+-- >>> hawaiian = insertFlags [Pineapple, Ham] margherita
+--
+insertFlags :: (Bits w, Enum flag)
+  => [flag] -> Bitmask w flag -> Bitmask w flag
+insertFlags fs bm = foldr insertFlag bm fs
 
 -- | Remove a flag from a bitmask (set it to 'False').
 --
test/Data/BitmaskSpec.hs view
@@ -49,11 +49,11 @@ 
 getAdd :: Property
 getAdd = property $ \(flag :: PizzaTopping) (bm :: PizzaMask) ->
-  getFlag flag (addFlag flag bm) == True
+  getFlag flag (insertFlag flag bm) == True
 
 getAdds :: Property
 getAdds = property $ \(flags :: [PizzaTopping]) (bm :: PizzaMask) ->
-  all id $ getFlags flags (addFlags flags bm)
+  all id $ getFlags flags (insertFlags flags bm)
 
 getDelete :: Property
 getDelete = property $ \(flag :: PizzaTopping) (bm :: PizzaMask) ->
@@ -78,8 +78,8 @@     it "fromToExcept" $ property fromToExcept
     it "getFlag flag allFlags == True" $ property getAll
     it "getFlag flag noFlag == False" $ property getNone
-    it "getFlag flag (addFlag flag bm) == True" $ property getAdd
-    it "all id (getFlags flags (addFlags flags bm))" $ property getAdds
+    it "getFlag flag (insertFlag flag bm) == True" $ property getAdd
+    it "all id (getFlags flags (insertFlags flags bm))" $ property getAdds
     it "getFlag flag (deleteFlag flag bm) == False" $ property getDelete
     it "all not (getFlags flags (deleteFlags flags bm))" $ property getDeletes
     it "modifyFlags not flags bm == flipFlags flags bm" $ property flipModifs
test/Data/Pizza.hs view
@@ -28,4 +28,4 @@ veggie = fromExceptFlags [Ham]
 
 hawaiian :: PizzaMask
-hawaiian = addFlags [Pineapple, Ham] margherita
+hawaiian = insertFlags [Pineapple, Ham] margherita