cron 0.4.1.2 → 0.4.2
raw patch · 4 files changed
+60/−22 lines, 4 filesdep +generics-sopdep −derivedep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: generics-sop
Dependencies removed: derive
Dependency ranges changed: base
API changes (from Hackage documentation)
- System.Cron.Internal.Check: domF :: Expanded -> EField
- System.Cron.Internal.Check: dowF :: Expanded -> EField
- System.Cron.Internal.Check: hourF :: Expanded -> EField
- System.Cron.Internal.Check: instance Show Expanded
- System.Cron.Internal.Check: minF :: Expanded -> EField
- System.Cron.Internal.Check: monthF :: Expanded -> EField
- System.Cron.Schedule: instance (Monad m, Functor m) => Applicative (ScheduleT m)
- System.Cron.Schedule: instance Functor m => Functor (ScheduleT m)
- System.Cron.Schedule: instance Monad m => Monad (ScheduleT m)
- System.Cron.Schedule: instance Monad m => MonadError ScheduleError (ScheduleT m)
- System.Cron.Schedule: instance Monad m => MonadSchedule (ScheduleT m)
- System.Cron.Schedule: instance Monad m => MonadState Jobs (ScheduleT m)
- System.Cron.Schedule: instance Show Job
- System.Cron.Schedule: instance Show ScheduleError
- System.Cron.Schedule: unSchedule :: ScheduleT m a -> StateT Jobs (ExceptT ScheduleError m) a
- System.Cron.Types: cronCommand :: CronCommand -> Text
- System.Cron.Types: crontabEntries :: Crontab -> [CrontabEntry]
- System.Cron.Types: dayOfMonth :: CronSchedule -> DayOfMonthSpec
- System.Cron.Types: dayOfWeek :: CronSchedule -> DayOfWeekSpec
- System.Cron.Types: hour :: CronSchedule -> HourSpec
- System.Cron.Types: instance Eq BaseField
- System.Cron.Types: instance Eq CronCommand
- System.Cron.Types: instance Eq CronField
- System.Cron.Types: instance Eq CronSchedule
- System.Cron.Types: instance Eq Crontab
- System.Cron.Types: instance Eq CrontabEntry
- System.Cron.Types: instance Eq DayOfMonthSpec
- System.Cron.Types: instance Eq DayOfWeekSpec
- System.Cron.Types: instance Eq HourSpec
- System.Cron.Types: instance Eq MinuteSpec
- System.Cron.Types: instance Eq MonthSpec
- System.Cron.Types: instance Eq RangeField
- System.Cron.Types: instance Eq SpecificField
- System.Cron.Types: instance Eq StepField
- System.Cron.Types: instance Ord CronCommand
- System.Cron.Types: instance Show BaseField
- System.Cron.Types: instance Show CronCommand
- System.Cron.Types: instance Show CronField
- System.Cron.Types: instance Show CronSchedule
- System.Cron.Types: instance Show Crontab
- System.Cron.Types: instance Show CrontabEntry
- System.Cron.Types: instance Show DayOfMonthSpec
- System.Cron.Types: instance Show DayOfWeekSpec
- System.Cron.Types: instance Show HourSpec
- System.Cron.Types: instance Show MinuteSpec
- System.Cron.Types: instance Show MonthSpec
- System.Cron.Types: instance Show RangeField
- System.Cron.Types: instance Show SpecificField
- System.Cron.Types: instance Show StepField
- System.Cron.Types: instance ShowT BaseField
- System.Cron.Types: instance ShowT CronCommand
- System.Cron.Types: instance ShowT CronField
- System.Cron.Types: instance ShowT CronSchedule
- System.Cron.Types: instance ShowT Crontab
- System.Cron.Types: instance ShowT CrontabEntry
- System.Cron.Types: instance ShowT DayOfMonthSpec
- System.Cron.Types: instance ShowT DayOfWeekSpec
- System.Cron.Types: instance ShowT HourSpec
- System.Cron.Types: instance ShowT Int
- System.Cron.Types: instance ShowT MinuteSpec
- System.Cron.Types: instance ShowT MonthSpec
- System.Cron.Types: instance ShowT RangeField
- System.Cron.Types: instance ShowT SpecificField
- System.Cron.Types: instance ShowT StepField
- System.Cron.Types: instance ShowT Text
- System.Cron.Types: minute :: CronSchedule -> MinuteSpec
- System.Cron.Types: month :: CronSchedule -> MonthSpec
+ System.Cron.Internal.Check: [domF] :: Expanded -> EField
+ System.Cron.Internal.Check: [dowF] :: Expanded -> EField
+ System.Cron.Internal.Check: [hourF] :: Expanded -> EField
+ System.Cron.Internal.Check: [minF] :: Expanded -> EField
+ System.Cron.Internal.Check: [monthF] :: Expanded -> EField
+ System.Cron.Internal.Check: instance GHC.Show.Show System.Cron.Internal.Check.Expanded
+ System.Cron.Schedule: [unSchedule] :: ScheduleT m a -> StateT Jobs (ExceptT ScheduleError m) a
+ System.Cron.Schedule: instance GHC.Base.Functor m => GHC.Base.Functor (System.Cron.Schedule.ScheduleT m)
+ System.Cron.Schedule: instance GHC.Base.Monad m => Control.Monad.Error.Class.MonadError System.Cron.Schedule.ScheduleError (System.Cron.Schedule.ScheduleT m)
+ System.Cron.Schedule: instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState System.Cron.Schedule.Jobs (System.Cron.Schedule.ScheduleT m)
+ System.Cron.Schedule: instance GHC.Base.Monad m => GHC.Base.Applicative (System.Cron.Schedule.ScheduleT m)
+ System.Cron.Schedule: instance GHC.Base.Monad m => GHC.Base.Monad (System.Cron.Schedule.ScheduleT m)
+ System.Cron.Schedule: instance GHC.Base.Monad m => System.Cron.Schedule.MonadSchedule (System.Cron.Schedule.ScheduleT m)
+ System.Cron.Schedule: instance GHC.Show.Show System.Cron.Schedule.Job
+ System.Cron.Schedule: instance GHC.Show.Show System.Cron.Schedule.ScheduleError
+ System.Cron.Types: [cronCommand] :: CronCommand -> Text
+ System.Cron.Types: [crontabEntries] :: Crontab -> [CrontabEntry]
+ System.Cron.Types: [dayOfMonth] :: CronSchedule -> DayOfMonthSpec
+ System.Cron.Types: [dayOfWeek] :: CronSchedule -> DayOfWeekSpec
+ System.Cron.Types: [hour] :: CronSchedule -> HourSpec
+ System.Cron.Types: [minute] :: CronSchedule -> MinuteSpec
+ System.Cron.Types: [month] :: CronSchedule -> MonthSpec
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.BaseField
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.CronCommand
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.CronField
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.CronSchedule
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.Crontab
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.CrontabEntry
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.DayOfMonthSpec
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.DayOfWeekSpec
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.HourSpec
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.MinuteSpec
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.MonthSpec
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.RangeField
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.SpecificField
+ System.Cron.Types: instance GHC.Classes.Eq System.Cron.Types.StepField
+ System.Cron.Types: instance GHC.Classes.Ord System.Cron.Types.CronCommand
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0BaseField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0CronCommand
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0CronField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0CronSchedule
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0Crontab
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0CrontabEntry
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0DayOfMonthSpec
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0DayOfWeekSpec
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0HourSpec
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0MinuteSpec
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0MonthSpec
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0RangeField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0SpecificField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_0StepField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_1BaseField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_1CronField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_1CrontabEntry
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_2BaseField
+ System.Cron.Types: instance GHC.Generics.Constructor System.Cron.Types.C1_2CronField
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1BaseField
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1CronCommand
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1CronField
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1CronSchedule
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1Crontab
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1CrontabEntry
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1DayOfMonthSpec
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1DayOfWeekSpec
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1HourSpec
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1MinuteSpec
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1MonthSpec
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1RangeField
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1SpecificField
+ System.Cron.Types: instance GHC.Generics.Datatype System.Cron.Types.D1StepField
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.BaseField
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.CronCommand
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.CronField
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.CronSchedule
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.Crontab
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.CrontabEntry
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.DayOfMonthSpec
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.DayOfWeekSpec
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.HourSpec
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.MinuteSpec
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.MonthSpec
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.RangeField
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.SpecificField
+ System.Cron.Types: instance GHC.Generics.Generic System.Cron.Types.StepField
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0CronCommand
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0CronSchedule
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0Crontab
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0DayOfMonthSpec
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0DayOfWeekSpec
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0HourSpec
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0MinuteSpec
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0MonthSpec
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0RangeField
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0SpecificField
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_0StepField
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_1CronSchedule
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_1RangeField
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_1StepField
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_2CronSchedule
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_3CronSchedule
+ System.Cron.Types: instance GHC.Generics.Selector System.Cron.Types.S1_0_4CronSchedule
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.BaseField
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.CronCommand
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.CronField
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.CronSchedule
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.Crontab
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.CrontabEntry
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.DayOfMonthSpec
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.DayOfWeekSpec
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.HourSpec
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.MinuteSpec
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.MonthSpec
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.RangeField
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.SpecificField
+ System.Cron.Types: instance GHC.Show.Show System.Cron.Types.StepField
+ System.Cron.Types: instance System.Cron.Types.ShowT Data.Text.Internal.Text
+ System.Cron.Types: instance System.Cron.Types.ShowT GHC.Types.Int
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.BaseField
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.CronCommand
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.CronField
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.CronSchedule
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.Crontab
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.CrontabEntry
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.DayOfMonthSpec
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.DayOfWeekSpec
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.HourSpec
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.MinuteSpec
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.MonthSpec
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.RangeField
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.SpecificField
+ System.Cron.Types: instance System.Cron.Types.ShowT System.Cron.Types.StepField
Files
- changelog +3/−0
- cron.cabal +2/−2
- src/System/Cron/Types.hs +18/−13
- test/SpecHelper.hs +37/−7
changelog view
@@ -1,3 +1,6 @@+# 0.4.2+* Drop dependency on derive in tests.+* Add some Generic and Typeable instances. # 0.4.1.1 * Bug fix for checking nextMatch where either the day of month or day of week fields were a singleton list of star. # 0.4.1.1
cron.cabal view
@@ -1,5 +1,5 @@ Name: cron-Version: 0.4.1.2+Version: 0.4.2 Description: Cron data structure and Attoparsec parser. The idea is to embed it in larger systems which want to roll their own scheduled tasks in a format that people@@ -77,13 +77,13 @@ , tasty , tasty-hunit , tasty-quickcheck- , derive , attoparsec , text , time , transformers-compat , semigroups , quickcheck-instances+ , generics-sop >= 0.2 if flag(lib-Werror) ghc-options: -Werror
src/System/Cron/Types.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-}@@ -56,6 +58,8 @@ import Data.Monoid import Data.Text (Text) import qualified Data.Text as T+import Data.Typeable (Typeable)+import GHC.Generics (Generic) ------------------------------------------------------------------------------- @@ -124,7 +128,7 @@ , dayOfMonth :: DayOfMonthSpec -- ^ Which days of the month to run. Third field in a cron specification. , month :: MonthSpec -- ^ Which months to run. Fourth field in a cron specification. , dayOfWeek :: DayOfWeekSpec -- ^ Which days of the week to run. Fifth field in a cron specification.- } deriving (Eq)+ } deriving (Eq, Generic, Typeable) instance Show CronSchedule where@@ -147,7 +151,7 @@ -- | Crontab file, omitting comments. newtype Crontab = Crontab { crontabEntries :: [CrontabEntry]- } deriving (Eq)+ } deriving (Eq, Generic, Typeable) instance ShowT Crontab where@@ -165,7 +169,7 @@ ------------------------------------------------------------------------------- newtype CronCommand = CronCommand { cronCommand :: Text- } deriving (Show, Eq, Ord, ShowT)+ } deriving (Show, Eq, Ord, ShowT, Generic, Typeable) -------------------------------------------------------------------------------@@ -173,7 +177,7 @@ -- command after it or setting an environment variable (e.g. FOO=BAR) data CrontabEntry = CommandEntry CronSchedule CronCommand | EnvVariable Text Text- deriving (Eq)+ deriving (Eq, Generic, Typeable) instance ShowT CrontabEntry where@@ -188,7 +192,7 @@ -- | Minutes field of a cron expression newtype MinuteSpec = Minutes { minuteSpec :: CronField- } deriving (Eq, ShowT)+ } deriving (Eq, ShowT, Generic, Typeable) instance Show MinuteSpec where@@ -206,7 +210,7 @@ -- | Hours field of a cron expression newtype HourSpec = Hours { hourSpec :: CronField- } deriving (Eq, ShowT)+ } deriving (Eq, ShowT, Generic, Typeable) instance Show HourSpec where@@ -223,7 +227,7 @@ -- | Day of month field of a cron expression newtype DayOfMonthSpec = DaysOfMonth { dayOfMonthSpec :: CronField- } deriving (Eq, ShowT)+ } deriving (Eq, ShowT, Generic, Typeable) instance Show DayOfMonthSpec where@@ -240,7 +244,7 @@ -- | Month field of a cron expression newtype MonthSpec = Months { monthSpec :: CronField- } deriving (Eq, ShowT)+ } deriving (Eq, ShowT, Generic, Typeable) instance Show MonthSpec where@@ -257,7 +261,7 @@ -- | Day of week field of a cron expression newtype DayOfWeekSpec = DaysOfWeek { dayOfWeekSpec :: CronField- } deriving (Eq, ShowT)+ } deriving (Eq, ShowT, Generic, Typeable) instance Show DayOfWeekSpec where@@ -304,7 +308,7 @@ data BaseField = Star -- ^ Matches anything | SpecificField' SpecificField -- ^ Matches a specific value (e.g. 1) | RangeField' RangeField -- ^ Matches a range of values (e.g. 1-3)- deriving (Eq)+ deriving (Eq, Generic, Typeable) instance ShowT BaseField where@@ -320,7 +324,7 @@ ------------------------------------------------------------------------------- newtype SpecificField = SpecificField { specificField :: Int- } deriving (Eq, ShowT)+ } deriving (Eq, ShowT, Generic, Typeable) instance Show SpecificField where@@ -337,7 +341,7 @@ data RangeField = RangeField { rfBegin :: Int , rfEnd :: Int- } deriving (Eq)+ } deriving (Eq, Generic, Typeable) instance ShowT RangeField where@@ -359,6 +363,7 @@ data CronField = Field BaseField | ListField (NonEmpty BaseField) -- ^ Matches a list of expressions. | StepField' StepField -- ^ Matches a stepped expression, e.g. (*/2).+ deriving (Generic) instance Eq CronField where@@ -383,7 +388,7 @@ ------------------------------------------------------------------------------- data StepField = StepField { sfField :: BaseField , sfStepping :: Int- } deriving (Eq)+ } deriving (Eq, Generic) instance ShowT StepField where
test/SpecHelper.hs view
@@ -1,5 +1,7 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# OPTIONS_GHC -fno-warn-orphans #-}-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TemplateHaskell #-} module SpecHelper ( module X , module SpecHelper@@ -9,16 +11,19 @@ ------------------------------------------------------------------------------- import Control.Applicative as X import Data.Attoparsec.Text as X (Parser, parseOnly)-import Data.DeriveTH-import Data.List.NonEmpty (NonEmpty (..))+import qualified Data.List.NonEmpty as NE import Data.Maybe as X import Data.Monoid as X+import Data.Proxy (Proxy (..)) import Data.Text (Text) import qualified Data.Text as T import Data.Time.Calendar as X import Data.Time.Clock as X import Data.Time.LocalTime as X import Debug.Trace as X+import qualified Generics.SOP as SOP+import qualified Generics.SOP.GGP as SOP+import GHC.Generics (Generic) import Test.QuickCheck.Instances () import Test.Tasty as X import Test.Tasty.HUnit as X@@ -28,10 +33,35 @@ ------------------------------------------------------------------------------- -$(derive makeArbitrary ''NonEmpty)-$(derive makeArbitrary ''BaseField)-$(derive makeArbitrary ''CronField)-$(derive makeArbitrary ''CronSchedule)+-- this workaround is in place until we successfully beat down the+-- doors of castle QuickCheck and get generic deriving through. See+-- <https://github.com/nick8325/quickcheck/pull/40>+sopArbitrary :: (Generic a, SOP.GTo a, SOP.All SOP.SListI (SOP.GCode a), SOP.All2 Arbitrary (SOP.GCode a)) => Gen a+sopArbitrary = fmap SOP.gto sopArbitrary'+++sopArbitrary' :: (SOP.All SOP.SListI xss, SOP.All2 Arbitrary xss) => Gen (SOP.SOP SOP.I xss)+sopArbitrary' = oneof (map SOP.hsequence $ SOP.apInjs_POP $ SOP.hcpure p arbitrary)+ where+ p :: Proxy Arbitrary+ p = Proxy+++instance Arbitrary BaseField where+ arbitrary = sopArbitrary+ shrink = genericShrink+++instance Arbitrary CronField where+ arbitrary = oneof [ Field <$> arbitrary+ , ListField . NE.fromList . getNonEmpty <$> arbitrary+ , StepField' <$> arbitrary+ ]+++instance Arbitrary CronSchedule where+ arbitrary = sopArbitrary+ shrink = genericShrink instance Arbitrary Crontab where