focus 1.0.3.1 → 1.0.3.2
raw patch · 3 files changed
+61/−61 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- focus.cabal +1/−1
- library/Focus/Prelude.hs +1/−1
- test/Main.hs +59/−59
focus.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: focus-version: 1.0.3.1+version: 1.0.3.2 synopsis: A general abstraction for manipulating elements of container data structures
library/Focus/Prelude.hs view
@@ -30,7 +30,7 @@ import Data.Fixed as Exports import Data.Foldable as Exports import Data.Function as Exports hiding (id, (.))-import Data.Functor as Exports+import Data.Functor as Exports hiding (unzip) import Data.Functor.Compose as Exports import Data.Functor.Identity as Exports import Data.IORef as Exports
test/Main.hs view
@@ -7,63 +7,63 @@ main :: IO () main =- defaultMain $- testGroup "" $- [ testCase "Monadically composed lookup and insert (https://github.com/nikita-volkov/stm-containers/issues/25)" $- let Focus.Focus absent present = do- prev <- Focus.lookup- Focus.insert "one"- pure (isJust prev)- in do- assertEqual "" (True, Focus.Set "one") $ runIdentity (present "zero")- assertEqual "" (False, Focus.Set "one") $ runIdentity absent,- testCase "Applicatively composed lookup and insert" $- let Focus.Focus absent present = (isJust <$> Focus.lookup) <* Focus.insert "one"- in do- assertEqual "" (True, Focus.Set "one") $ runIdentity (present "zero")- assertEqual "" (False, Focus.Set "one") $ runIdentity absent,- testCase "Applicatively composed pure and insert" $- let Focus.Focus absent present = pure () <* Focus.insert "one"- in do- assertEqual "" ((), Focus.Set "one") (runIdentity (present "zero"))- assertEqual "" ((), Focus.Set "one") (runIdentity absent),- testCase "insert" $- let Focus.Focus absent present = Focus.insert "one"- in do- assertEqual "" ((), Focus.Set "one") (runIdentity (present "zero"))- assertEqual "" ((), Focus.Set "one") (runIdentity absent),- testCase "alter" $- let f :: Maybe String -> Maybe String- f = const Nothing- Focus.Focus absent present = Focus.alter f- in do- assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))- assertEqual "" ((), Focus.Leave) (runIdentity absent),- testCase "update" $- let f :: String -> Maybe String- f = const Nothing- Focus.Focus absent present = Focus.update f- in do- assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))- assertEqual "" ((), Focus.Leave) (runIdentity absent),- testCase "updateM" $- let f :: String -> Identity (Maybe String)- f = const (pure Nothing)- Focus.Focus absent present = Focus.updateM f- in do- assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))- assertEqual "" ((), Focus.Leave) (runIdentity absent),- testCase "delete" $- let Focus.Focus absent present = Focus.delete- in do- assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))- assertEqual "" ((), Focus.Leave @()) (runIdentity absent),- testCase "Monadically composed lookup and delete (https://github.com/nikita-volkov/focus/issues/7)" $- let Focus.Focus absent present = do- a <- Focus.lookup- Focus.delete- pure a- in do- assertEqual "" (Just (), Focus.Remove) (runIdentity (present ()))- assertEqual "" (Nothing @(), Focus.Leave) (runIdentity absent)+ defaultMain+ $ testGroup ""+ $ [ testCase "Monadically composed lookup and insert (https://github.com/nikita-volkov/stm-containers/issues/25)"+ $ let Focus.Focus absent present = do+ prev <- Focus.lookup+ Focus.insert "one"+ pure (isJust prev)+ in do+ assertEqual "" (True, Focus.Set "one") $ runIdentity (present "zero")+ assertEqual "" (False, Focus.Set "one") $ runIdentity absent,+ testCase "Applicatively composed lookup and insert"+ $ let Focus.Focus absent present = (isJust <$> Focus.lookup) <* Focus.insert "one"+ in do+ assertEqual "" (True, Focus.Set "one") $ runIdentity (present "zero")+ assertEqual "" (False, Focus.Set "one") $ runIdentity absent,+ testCase "Applicatively composed pure and insert"+ $ let Focus.Focus absent present = pure () <* Focus.insert "one"+ in do+ assertEqual "" ((), Focus.Set "one") (runIdentity (present "zero"))+ assertEqual "" ((), Focus.Set "one") (runIdentity absent),+ testCase "insert"+ $ let Focus.Focus absent present = Focus.insert "one"+ in do+ assertEqual "" ((), Focus.Set "one") (runIdentity (present "zero"))+ assertEqual "" ((), Focus.Set "one") (runIdentity absent),+ testCase "alter"+ $ let f :: Maybe String -> Maybe String+ f = const Nothing+ Focus.Focus absent present = Focus.alter f+ in do+ assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))+ assertEqual "" ((), Focus.Leave) (runIdentity absent),+ testCase "update"+ $ let f :: String -> Maybe String+ f = const Nothing+ Focus.Focus absent present = Focus.update f+ in do+ assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))+ assertEqual "" ((), Focus.Leave) (runIdentity absent),+ testCase "updateM"+ $ let f :: String -> Identity (Maybe String)+ f = const (pure Nothing)+ Focus.Focus absent present = Focus.updateM f+ in do+ assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))+ assertEqual "" ((), Focus.Leave) (runIdentity absent),+ testCase "delete"+ $ let Focus.Focus absent present = Focus.delete+ in do+ assertEqual "" ((), Focus.Remove) (runIdentity (present "zero"))+ assertEqual "" ((), Focus.Leave @()) (runIdentity absent),+ testCase "Monadically composed lookup and delete (https://github.com/nikita-volkov/focus/issues/7)"+ $ let Focus.Focus absent present = do+ a <- Focus.lookup+ Focus.delete+ pure a+ in do+ assertEqual "" (Just (), Focus.Remove) (runIdentity (present ()))+ assertEqual "" (Nothing @(), Focus.Leave) (runIdentity absent) ]