bluefin-contrib 0.2.0.0 → 0.2.1.0
raw patch · 4 files changed
+93/−4 lines, 4 filesdep ~basedep ~bluefinPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, bluefin
API changes (from Hackage documentation)
+ Bluefin.Contrib.Operators: (%=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Integral a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators: (&=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Bits a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators: (*=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Num a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators: (+=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Num a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators: (-=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Num a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators: (<<=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Bits a) => State a e -> Int -> Eff es ()
+ Bluefin.Contrib.Operators: (^=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Bits a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators: (|=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Bits a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators.Clashing: (/=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Fractional a) => State a e -> a -> Eff es ()
+ Bluefin.Contrib.Operators.Clashing: (>>=) :: forall (e :: Effects) (es :: Effects) a. (e :> es, Bits a) => State a e -> Int -> Eff es ()
Files
- CHANGELOG.md +4/−0
- bluefin-contrib.cabal +6/−4
- src/Bluefin/Contrib/Operators.hs +64/−0
- src/Bluefin/Contrib/Operators/Clashing.hs +19/−0
CHANGELOG.md view
@@ -1,3 +1,7 @@+## 0.2.1.0++Add `Bluefin.Contrib.Operators` and `Bluefin.Contrib.Operators.Clashing`+ ## 0.2.0.0 * Transitive version bump because of choice of different incoherent
bluefin-contrib.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: bluefin-contrib-version: 0.2.0.0+version: 0.2.1.0 license: MIT license-file: LICENSE author: Tom Ellis@@ -75,7 +75,9 @@ default-language: Haskell2010 hs-source-dirs: src build-depends:- base >= 4.12 && < 4.22,- bluefin >= 0.2.0.0 && < 0.3+ base >= 4.12 && < 4.23,+ bluefin >= 0.2.0.0 && < 0.5 exposed-modules:- Bluefin.Contrib.State+ Bluefin.Contrib.State,+ Bluefin.Contrib.Operators,+ Bluefin.Contrib.Operators.Clashing
+ src/Bluefin/Contrib/Operators.hs view
@@ -0,0 +1,64 @@+-- |+--+-- @+-- -- ghci> example+-- -- Triangular number 1 is 0+-- -- Triangular number 2 is 1+-- -- Triangular number 3 is 3+-- -- Triangular number 4 is 6+-- -- Triangular number 5 is 10+-- example :: IO ()+-- example = runEff $ \\io -> evalState @Int 0 $ \\st -> do+-- for_ [1..5] $ \\i -> do+-- n <- get st+-- let msg = "Triangular number " <> show i <> " is " <> show n+-- effIO io (putStrLn msg)+-- st += i+-- @+--+-- For @('Bluefin.Contrib.Operators.Clashing.>>=')@ and+-- @('Bluefin.Contrib.Operators.Clashing./=')@, which clash with+-- operators from 'Prelude' of the same name, see+-- "Bluefin.Contrib.Operators.Clashing".+module Bluefin.Contrib.Operators+ ( (+=),+ (-=),+ (*=),+ (%=),+ (&=),+ (|=),+ (^=),+ (<<=),+ )+where++import Bluefin.Eff (Eff, (:>))+import Bluefin.State (State, modify)+import Data.Bits (Bits, shiftL, xor, (.&.), (.|.))++(+=) :: (e :> es, Num a) => State a e -> a -> Eff es ()+(+=) = opEquals (+)++(-=) :: (e :> es, Num a) => State a e -> a -> Eff es ()+(-=) = opEquals (-)++(*=) :: (e :> es, Num a) => State a e -> a -> Eff es ()+(*=) = opEquals (*)++(%=) :: (e :> es, Integral a) => State a e -> a -> Eff es ()+(%=) = opEquals mod++(&=) :: (e :> es, Bits a) => State a e -> a -> Eff es ()+(&=) = opEquals (.&.)++(|=) :: (e :> es, Bits a) => State a e -> a -> Eff es ()+(|=) = opEquals (.|.)++(^=) :: (e :> es, Bits a) => State a e -> a -> Eff es ()+(^=) = opEquals xor++(<<=) :: (e :> es, Bits a) => State a e -> Int -> Eff es ()+(<<=) = opEquals shiftL++opEquals :: (e :> es) => (s -> p -> s) -> State s e -> p -> Eff es ()+opEquals op st n = modify st (`op` n)
+ src/Bluefin/Contrib/Operators/Clashing.hs view
@@ -0,0 +1,19 @@+module Bluefin.Contrib.Operators.Clashing+ ( (/=),+ (>>=),+ )+where++import Bluefin.Eff (Eff, (:>))+import Bluefin.State (State, modify)+import Data.Bits (Bits, shiftR)+import Prelude hiding ((/=), (>>=))++(/=) :: (e :> es, Fractional a) => State a e -> a -> Eff es ()+(/=) = opEquals (/)++(>>=) :: (e :> es, Bits a) => State a e -> Int -> Eff es ()+(>>=) = opEquals shiftR++opEquals :: (e :> es) => (a -> b -> a) -> State a e -> b -> Eff es ()+opEquals op st n = modify st (`op` n)