liblawless 0.17.3 → 0.18.0
raw patch · 11 files changed
+61/−124 lines, 11 filesdep +concurrent-machinesdep +monad-controldep ~managedPVP ok
version bump matches the API change (PVP)
Dependencies added: concurrent-machines, monad-control
Dependency ranges changed: managed
API changes (from Hackage documentation)
- Arbitrary: instance Test.QuickCheck.Arbitrary.Arbitrary (Textual.SepList.SepList GHC.Types.Char)
- Set: singleton :: a -> Set a
- Textual.SepList: instance (GHC.Classes.Ord a, Data.Binary.Class.Binary a, Data.Textual.Printable a) => Data.Binary.Class.Binary (Textual.SepList.SepList' (Data.List.NonEmpty.NonEmpty a))
- Textual.SepList: instance Data.Foldable.Foldable Textual.SepList.SepList'
- Textual.SepList: instance Data.Semigroup.Semigroup (Textual.SepList.SepList' (Data.List.NonEmpty.NonEmpty a))
- Textual.SepList: instance Data.Textual.Printable a => Data.Textual.Printable (Textual.SepList.SepList' (Data.List.NonEmpty.NonEmpty a))
- Textual.SepList: instance Data.Textual.Printable a => GHC.Show.Show (Textual.SepList.SepList a)
- Textual.SepList: instance GHC.Classes.Eq (Textual.SepList.SepList' (Data.List.NonEmpty.NonEmpty a))
- Textual.SepList: instance GHC.Classes.Ord (Textual.SepList.SepList' (Data.List.NonEmpty.NonEmpty a))
- Textual.SepList: sepList :: forall a. (Ord a, Binary a, Printable a) => a -> SepList a
- Textual.SepList: slItems :: Lens' (SepList' (NonEmpty a)) (NonEmpty a)
- Textual.SepList: type SepList a = SepList' (NonEmpty a)
+ Machine: (⇜) :: Monad m => ProcessT m b c -> MachineT m k b -> MachineT m k c
+ Machine: (⇝) :: Monad m => MachineT m k b -> ProcessT m b c -> MachineT m k c
+ Machine: infixl 9 ⇝
+ Machine: infixr 9 ⇜
+ Path: infixl 7 <++>
+ Path: infixr 5 </>
+ Set: sing :: Getter a (Set a)
- IO: using :: Managed a -> m a
+ IO: using :: MonadManaged m => Managed a -> m a
- Time: buildTime :: TimeLocale -> [(Char, String)] -> Maybe t
+ Time: buildTime :: ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
- Time: formatCharacter :: Char -> Maybe (TimeLocale -> Maybe NumericPadOption -> t -> String)
+ Time: formatCharacter :: FormatTime t => Char -> Maybe (TimeLocale -> Maybe NumericPadOption -> t -> String)
Files
- Source/Arbitrary.hs +0/−5
- Source/Lawless.hs +5/−4
- Source/Machine.hs +33/−4
- Source/Path.hs +11/−18
- Source/Set.hs +5/−1
- Source/Textual.hs +1/−3
- Source/Textual/SepList.hs +0/−48
- Source/Time.hs +0/−1
- Tests/Main.hs +0/−2
- Tests/TestSepList.hs +0/−32
- liblawless.cabal +6/−6
Source/Arbitrary.hs view
@@ -16,15 +16,10 @@ import Test.QuickCheck (Arbitrary(..), listOf1, suchThat) import Text import Time-import Textual.SepList import Data.Time import Data.Time.Clock() import Data.Time.Calendar() import Data.Text (Text)--instance Arbitrary (SepList Char) where- arbitrary =- foldl1Of folded (<>) ∘ over traversed sepList <$> listOf1 arbitrary instance Arbitrary Text where arbitrary = view packed <$> listOf1 arbitrary
Source/Lawless.hs view
@@ -9,13 +9,14 @@ module Control.Lens, module UNI, module Prelude.Unicode,+ module Control.Applicative.Unicode, module Data.Bool, module Data.Eq, module Data.Ord, module Data.Function, module Data.Maybe, module Data.Either,- module Data.Semigroup,+ module Data.Monoid, module Control.Applicative ) where @@ -35,14 +36,14 @@ import Data.Either (Either(..)) import Control.Applicative import Data.Bool hiding (bool)-import Data.Semigroup+import Data.Monoid -import Control.Applicative.Unicode as UNI import Control.Arrow.Unicode as UNI import Control.Monad.Unicode as UNI+import Control.Applicative.Unicode ((⊛)) import Data.Bool.Unicode as UNI import Data.Eq.Unicode as UNI-import Data.Foldable.Unicode as UNI import Data.Function.Unicode as UNI+import Data.Monoid.Unicode as UNI import Data.Ord.Unicode as UNI import Prelude.Unicode ((⋅))
Source/Machine.hs view
@@ -1,6 +1,35 @@ module Machine (- module Data.Machine- )-where+ module Data.Machine.Concurrent,+ (⇝),+ (⇜)+ ) where -import Data.Machine+import Lawless hiding ((<~), (~>))+import Data.Machine.Concurrent+import Control.Monad+import Control.Monad.Trans.Control++infixr 9 ⇜+infixl 9 ⇝+infixr 7 ↢+infixl 7 ↣+infixr 6 ⧻+infixr 6 ⫴++(⇝) ∷ Monad m ⇒ MachineT m k b → ProcessT m b c → MachineT m k c+(⇝) = (~>)++(⇜) ∷ Monad m ⇒ ProcessT m b c → MachineT m k b → MachineT m k c+(⇜) = (<~)++(↣) ∷ MonadBaseControl IO m ⇒ MachineT m k b → ProcessT m b c → MachineT m k c+(↣) = (>~>)++(↢) ∷ MonadBaseControl IO m ⇒ ProcessT m b c → MachineT m k b → MachineT m k c+(↢) = (<~<)++(⧻) ∷ ∀ m a b c d. MonadBaseControl IO m ⇒ ProcessT m a b → ProcessT m c d → ProcessT m (Either a c) (Either b d)+(⧻) = splitSum++(⫴) ∷ ∀ m a b r. MonadBaseControl IO m ⇒ ProcessT m a r -> ProcessT m b r -> ProcessT m (Either a b) r+(⫴) = mergeSum
Source/Path.hs view
@@ -11,40 +11,33 @@ -} module Path (- P.toString,- P.rootDir,- P.currentDir,- P.emptyFile,- P.splitPath,- P.dropExtension,- P.dropExtensions,- P.dropFileName,- P.replaceExtension,- P.replaceBaseName,- P.replaceDirectory,- P.replaceFileName, P.addExtension, P.combine,+ P.currentDir, P.dropExtension, P.dropExtensions, P.dropFileName,- P.replaceExtension,+ P.emptyFile,+ P.mapFileName,+ P.mapFileNameF, P.replaceBaseName, P.replaceDirectory,+ P.replaceExtension, P.replaceFileName,+ P.rootDir,+ P.splitDirName, P.splitExtension, P.splitExtensions, P.splitFileName,- P.splitDirName,+ P.splitPath, P.takeBaseName,+ P.takeDirName, P.takeDirectory,- P.takeSuperDirectory, P.takeExtension, P.takeExtensions, P.takeFileName,- P.takeDirName,- P.mapFileName,- P.mapFileNameF,+ P.takeSuperDirectory,+ P.toString, -- * Auxillary Manipulation Functions P.equalFilePath,
Source/Set.hs view
@@ -2,9 +2,13 @@ module Data.Set.Lens, module Data.Set.Unicode, Set,- singleton+ sing ) where +import Control.Lens.Getter import Data.Set.Lens import Data.Set.Unicode import Data.Set (Set, singleton)++sing ∷ Getter a (Set a)+sing = to singleton
Source/Textual.hs view
@@ -2,11 +2,9 @@ module Textual ( module Data.Textual,- module Text.Printer,- module Textual.SepList+ module Text.Printer ) where import Data.Textual import Text.Printer hiding ((<>))-import Textual.SepList
− Source/Textual/SepList.hs
@@ -1,48 +0,0 @@-{-# LANGUAGE DeriveFoldable #-}-module Textual.SepList- (- SepList,- sepList,- slItems- ) where--import Lawless-import Data.Textual-import Text.Printer (hsep)-import Data.Binary-import Data.List.NonEmpty-import Data.Foldable (Foldable)-import Data.Binary.Get-import Control.Monad.Fail--type SepList a = SepList' (NonEmpty a)--sepList ∷ ∀ a. (Ord a, Binary a, Printable a) ⇒ a → SepList a-sepList a = SepList' $ a :| []---- | A serializable printable separated list.-data SepList' a where- SepList' ∷ ∀ a. (Ord a, Eq a, Binary a, Printable a) ⇒ NonEmpty a → SepList' (NonEmpty a)--deriving instance Foldable SepList'-deriving instance Eq (SepList a)-deriving instance Ord (SepList a)--slItems ∷ Lens' (SepList' (NonEmpty a)) (NonEmpty a)-slItems = lens (\(SepList' i) → i) (\(SepList' _) j → SepList' j)--instance Semigroup (SepList' (NonEmpty a)) where- a <> b = a & slItems .~ ((a ^. slItems) <> (b ^. slItems))--instance (Ord a, Binary a, Printable a) ⇒ Binary (SepList' (NonEmpty a)) where- put = putList ∘ toList ∘ view slItems- get = label "SepList'" $ do- (nonEmpty <$> get) >>= \case- Nothing → fail "Encountered an empty SepList'"- Just l → return ∘ SepList' $ l--instance (Printable a) ⇒ Printable (SepList' (NonEmpty a)) where- print = hsep ∘ over traversed print ∘ view slItems--instance (Printable a)⇒ Show (SepList a) where- show = toString
Source/Time.hs view
@@ -20,7 +20,6 @@ import qualified Textual as T - newtype Time = Time UTCTime deriving (Show, Eq, Ord, ParseTime, FormatTime, Generic) makePrisms ''Time
Tests/Main.hs view
@@ -4,7 +4,6 @@ import Test.Framework (defaultMain) import qualified TestTime as TT-import qualified TestSepList as TS import qualified TestAeson as TJ import qualified TestTemporary as TM import qualified TestAesonEncoding as TE@@ -12,7 +11,6 @@ main :: IO () main = defaultMain [ TT.properties,- TS.properties, TJ.properties, TM.properties, TE.properties]
− Tests/TestSepList.hs
@@ -1,32 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}-{-# OPTIONS_GHC -Wno-orphans #-}--module TestSepList (properties) where--import Lawless-import Arbitrary()-import Textual--import Test.Framework-import Test.Framework.TH-import Test.Framework.Providers.QuickCheck2 (testProperty)-import Test.QuickCheck--import qualified Data.ByteString.Lazy as L--import Data.Binary--prop_Semigroup :: SepList Char -> SepList Char -> Property-prop_Semigroup (a :: SepList Char) (b :: SepList Char) =- (a <> b) ^. slItems === (a ^. slItems) <> (b ^. slItems)--prop_Serialize :: SepList Char -> Property-prop_Serialize (a :: SepList Char) =- let- sz = L.toStrict $ encode a- de = decode $ L.fromStrict sz- in- (de ^. slItems) === (a ^. slItems)--properties ∷ Test-properties = $(testGroupGenerator)
liblawless.cabal view
@@ -1,5 +1,5 @@ name: liblawless-version: 0.17.3+version: 0.18.0 synopsis: Prelude based on protolude for GHC 8 and beyond. license: GPL-3 license-file: LICENSE@@ -27,10 +27,10 @@ source-repository this type: git location: git@gitlab.com:misandrist/liblawless.git- tag: v0.17.2+ tag: v0.18.0 library- ghc-options: -Wall -O2+ ghc-options: -Wall -Wno-redundant-constraints -O2 exposed-modules: Aeson Arbitrary@@ -49,7 +49,6 @@ Text Text.IO Textual- Textual.SepList Time Tree default-extensions:@@ -83,6 +82,7 @@ bytestring >= 0.10.8 && < 0.11, containers >= 0.5.7 && < 0.6, containers-unicode-symbols >= 0.3.1 && < 0.4,+ concurrent-machines >= 0.2.3.3 && < 0.3, contravariant >= 1.4 && < 1.5, data-default >= 0.7.1.1 && < 0.8, data-textual >= 0.3.0 && < 0.4,@@ -91,7 +91,8 @@ hjsonschema >= 1.2.0 && < 1.3, lens >= 4.14 && < 4.15, machines >= 0.6.1 && < 0.7,- managed,+ managed >= 1.0.5 && < 1.1,+ monad-control >= 1.0.1.0 && < 1.1, mtl >= 2.2.1 && < 2.3, network >= 2.6.3.1 && < 2.7, network-ip >= 0.3 && < 0.4,@@ -123,7 +124,6 @@ main-is: Main.hs other-modules: TestAeson- TestSepList TestTemporary TestTime Paths_liblawless