predicate-typed-0.7.3.0: Predicates, Refinement types and Dsl

Safe HaskellNone
LanguageHaskell2010

Predicate.Data.Enum

Contents

Description

promoted enum functions

Synopsis

constructors

data p ... q infix 4 Source #

similar to enumFromTo

>>> pz @(2 ... 5) ()
PresentT [2,3,4,5]
>>> pz @('LT ... 'GT) ()
PresentT [LT,EQ,GT]
>>> pz @('Just (MkDay '(2020, 1, 2)) ... 'Just (MkDay '(2020, 1, 7))) ()
PresentT [2020-01-02,2020-01-03,2020-01-04,2020-01-05,2020-01-06,2020-01-07]
Instances
P (EnumFromToT p q) x => P (p ... q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (p ... q) x :: Type Source #

Methods

eval :: MonadEval m => proxy (p ... q) -> POpts -> x -> m (TT (PP (p ... q) x)) Source #

type PP (p ... q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (p ... q :: Type) x

data EnumFromTo p q Source #

similar to enumFromTo

>>> pz @(EnumFromTo 'GT 'LT) ()
PresentT []
>>> pz @(EnumFromTo (Pred Id) (Succ Id)) (SG.Max 10)
PresentT [Max {getMax = 9},Max {getMax = 10},Max {getMax = 11}]
>>> pz @(EnumFromTo 1 20 >> Map '(Id, (If (Id `Mod` 3 == 0) "Fizz" "" <> If (Id `Mod` 5 == 0) "Buzz" "")) Id) 123
PresentT [(1,""),(2,""),(3,"Fizz"),(4,""),(5,"Buzz"),(6,"Fizz"),(7,""),(8,""),(9,"Fizz"),(10,"Buzz"),(11,""),(12,"Fizz"),(13,""),(14,""),(15,"FizzBuzz"),(16,""),(17,""),(18,"Fizz"),(19,""),(20,"Buzz")]
>>> pl @(EnumFromTo (Pure SG.Min 9) (Pure _ 13)) ()
Present [Min {getMin = 9},Min {getMin = 10},Min {getMin = 11},Min {getMin = 12},Min {getMin = 13}] (Min {getMin = 9} ... Min {getMin = 13})
PresentT [Min {getMin = 9},Min {getMin = 10},Min {getMin = 11},Min {getMin = 12},Min {getMin = 13}]
>>> pl @(EnumFromTo (Wrap (SG.Min _) 9) (Wrap _ 13)) ()
Present [Min {getMin = 9},Min {getMin = 10},Min {getMin = 11},Min {getMin = 12},Min {getMin = 13}] (Min {getMin = 9} ... Min {getMin = 13})
PresentT [Min {getMin = 9},Min {getMin = 10},Min {getMin = 11},Min {getMin = 12},Min {getMin = 13}]
Instances
(P p x, P q x, PP p x ~ a, Show a, PP q x ~ a, Enum a) => P (EnumFromTo p q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (EnumFromTo p q) x :: Type Source #

Methods

eval :: MonadEval m => proxy (EnumFromTo p q) -> POpts -> x -> m (TT (PP (EnumFromTo p q) x)) Source #

type PP (EnumFromTo p q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (EnumFromTo p q :: Type) x = [PP p x]

data EnumFromThenTo p q r Source #

similar to enumFromThenTo

>>> pz @(EnumFromThenTo (ToEnum Day 10) (ToEnum Day 20) (ToEnum Day 70)) ()
PresentT [1858-11-27,1858-12-07,1858-12-17,1858-12-27,1859-01-06,1859-01-16,1859-01-26]
>>> pz @(EnumFromThenTo (ReadP Day "2020-01-12") (ReadP Day "2020-02-12") (ReadP Day "2020-08-12")) ()
PresentT [2020-01-12,2020-02-12,2020-03-14,2020-04-14,2020-05-15,2020-06-15,2020-07-16]
Instances
(P p x, P q x, P r x, PP p x ~ a, Show a, PP q x ~ a, PP r x ~ a, Enum a) => P (EnumFromThenTo p q r :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (EnumFromThenTo p q r) x :: Type Source #

Methods

eval :: MonadEval m => proxy (EnumFromThenTo p q r) -> POpts -> x -> m (TT (PP (EnumFromThenTo p q r) x)) Source #

type PP (EnumFromThenTo p q r :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (EnumFromThenTo p q r :: Type) x = [PP p x]

data FromEnum p Source #

fromEnum function

>>> pz @(FromEnum Id) 'x'
PresentT 120
>>> pl @(FromEnum ("aa" ==! Id) >> Same 1) "aaaa"
False ((>>) False | {0 == 1})
FalseT
>>> pl @(FromEnum ("aa" ==! Id) >> ToEnum OrderingP Id) "aaaa"
Present CGt ((>>) CGt | {ToEnum CGt | 0})
PresentT CGt
>>> pl @(Map (FromEnum Id) Id >> Map (ToEnum Char Id) Id) ("abcd" :: String)
Present "abcd" ((>>) "abcd" | {Map "abcd" | [97,98,99,100]})
PresentT "abcd"
Instances
(Show a, Enum a, PP p x ~ a, P p x) => P (FromEnum p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (FromEnum p) x :: Type Source #

Methods

eval :: MonadEval m => proxy (FromEnum p) -> POpts -> x -> m (TT (PP (FromEnum p) x)) Source #

type PP (FromEnum p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (FromEnum p :: Type) x = Int

bounded enums

data SuccB p q Source #

bounded succ function

>>> pz @(SuccB 'LT Id) GT
PresentT LT
Instances
(PP q x ~ a, P q x, P p (Proxy a), PP p (Proxy a) ~ a, Show a, Eq a, Bounded a, Enum a) => P (SuccB p q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (SuccB p q) x :: Type Source #

Methods

eval :: MonadEval m => proxy (SuccB p q) -> POpts -> x -> m (TT (PP (SuccB p q) x)) Source #

type PP (SuccB p q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (SuccB p q :: Type) x = PP q x

data SuccB' q Source #

bounded succ function

>>> pz @(SuccB' Id) GT
FailT "Succ bounded"
>>> pz @(SuccB' Id) (13 :: Int)
PresentT 14
>>> pz @(SuccB' Id) LT
PresentT EQ
Instances
P (SuccBT' q) x => P (SuccB' q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (SuccB' q) x :: Type Source #

Methods

eval :: MonadEval m => proxy (SuccB' q) -> POpts -> x -> m (TT (PP (SuccB' q) x)) Source #

type PP (SuccB' q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (SuccB' q :: Type) x

data PredB p q Source #

bounded pred function

>>> pl @(PredB 'GT Id) LT
Present GT (PredB out of range)
PresentT GT
>>> pl @(PredB 'LT Id) GT
Present EQ (PredB EQ | GT)
PresentT EQ
Instances
(PP q x ~ a, P q x, P p (Proxy a), PP p (Proxy a) ~ a, Show a, Eq a, Bounded a, Enum a) => P (PredB p q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (PredB p q) x :: Type Source #

Methods

eval :: MonadEval m => proxy (PredB p q) -> POpts -> x -> m (TT (PP (PredB p q) x)) Source #

type PP (PredB p q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (PredB p q :: Type) x = PP q x

data PredB' q Source #

bounded pred function

>>> pz @(PredB' Id) (13 :: Int)
PresentT 12
>>> pz @(PredB' Id) LT
FailT "Pred bounded"
>>> pl @(PredB' Id) GT
Present EQ (PredB EQ | GT)
PresentT EQ
>>> pl @(PredB' Id) LT
Error Pred bounded (PredB out of range)
FailT "Pred bounded"
Instances
P (PredBT' q) x => P (PredB' q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (PredB' q) x :: Type Source #

Methods

eval :: MonadEval m => proxy (PredB' q) -> POpts -> x -> m (TT (PP (PredB' q) x)) Source #

type PP (PredB' q :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (PredB' q :: Type) x

data ToEnumBDef (t :: Type) def Source #

bounded toEnum function

>>> pz @(ToEnumBDef Ordering LT) 2
PresentT GT
>>> pz @(ToEnumBDef Ordering LT) 6
PresentT LT
>>> pl @(ToEnumBDef Ordering 'LT) 123
Present LT (ToEnumBDef out of range)
PresentT LT
>>> pl @(ToEnumBDef Ordering 'GT) 1
Present EQ (ToEnumBDef EQ | 1)
PresentT EQ
Instances
P (ToEnumBDefT t def) x => P (ToEnumBDef t def :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (ToEnumBDef t def) x :: Type Source #

Methods

eval :: MonadEval m => proxy (ToEnumBDef t def) -> POpts -> x -> m (TT (PP (ToEnumBDef t def) x)) Source #

type PP (ToEnumBDef t def :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (ToEnumBDef t def :: Type) x

data ToEnumBDef' t def Source #

Instances
(P def (Proxy (PP t a)), PP def (Proxy (PP t a)) ~ PP t a, Show a, Show (PP t a), Bounded (PP t a), Enum (PP t a), Integral a) => P (ToEnumBDef' t def :: Type) a Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (ToEnumBDef' t def) a :: Type Source #

Methods

eval :: MonadEval m => proxy (ToEnumBDef' t def) -> POpts -> a -> m (TT (PP (ToEnumBDef' t def) a)) Source #

type PP (ToEnumBDef' t def :: Type) a Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (ToEnumBDef' t def :: Type) a = PP t a

data ToEnumBFail (t :: Type) Source #

bounded toEnum function

>>> pz @(ToEnumBFail Ordering) 6
FailT "ToEnum bounded"
>>> pl @(ToEnumBFail Ordering) 1
Present EQ (ToEnumBDef EQ | 1)
PresentT EQ
>>> pl @(ToEnumBFail Ordering) 44
Error ToEnum bounded (ToEnumBDef out of range)
FailT "ToEnum bounded"
Instances
P (ToEnumBFailT t) x => P (ToEnumBFail t :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (ToEnumBFail t) x :: Type Source #

Methods

eval :: MonadEval m => proxy (ToEnumBFail t) -> POpts -> x -> m (TT (PP (ToEnumBFail t) x)) Source #

type PP (ToEnumBFail t :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (ToEnumBFail t :: Type) x

unsafe enum expressions

data Succ p Source #

unbounded succ function

>>> pz @(Succ Id) 13
PresentT 14
>>> pz @(Succ Id) LT
PresentT EQ
>>> pz @(Succ Id) GT
FailT "Succ IO e=Prelude.Enum.Ordering.succ: bad argument"
>>> pl @(Succ Id) 10
Present 11 (Succ 11 | 10)
PresentT 11
>>> pl @(Succ Id) True -- captures the exception
Error Succ IO e=Prelude.Enum.Bool.succ: bad argument (True)
FailT "Succ IO e=Prelude.Enum.Bool.succ: bad argument"
Instances
(Show a, Enum a, PP p x ~ a, P p x) => P (Succ p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (Succ p) x :: Type Source #

Methods

eval :: MonadEval m => proxy (Succ p) -> POpts -> x -> m (TT (PP (Succ p) x)) Source #

type PP (Succ p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (Succ p :: Type) x = PP p x

data SuccN n p Source #

SuccN n p (unsafe) increments an enum p by the given integral n

>>> pz @(ReadP Day Id >> Id ... SuccN 5 Id) "2020-07-27"
PresentT [2020-07-27,2020-07-28,2020-07-29,2020-07-30,2020-07-31,2020-08-01]
>>> pz @(ReadP Day Id >> SuccN (Negate 5) Id) "2020-07-27"
PresentT 2020-07-22
>>> pl @(SuccN 3 'LT) ()
Error SuccN IO e=Prelude.Enum.Ordering.toEnum: bad argument (SuccN 3 LT)
FailT "SuccN IO e=Prelude.Enum.Ordering.toEnum: bad argument"
>>> pz @(SuccN 2 'LT) ()
PresentT GT
Instances
(Show a, Enum a, Integral (PP n x), P n x, PP p x ~ a, P p x) => P (SuccN n p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (SuccN n p) x :: Type Source #

Methods

eval :: MonadEval m => proxy (SuccN n p) -> POpts -> x -> m (TT (PP (SuccN n p) x)) Source #

type PP (SuccN n p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (SuccN n p :: Type) x = PP p x

data Pred p Source #

unbounded pred function

>>> pz @(Pred Id) 13
PresentT 12
>>> pz @(Pred Id) LT
FailT "Pred IO e=Prelude.Enum.Ordering.pred: bad argument"
Instances
(Show a, Enum a, PP p x ~ a, P p x) => P (Pred p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (Pred p) x :: Type Source #

Methods

eval :: MonadEval m => proxy (Pred p) -> POpts -> x -> m (TT (PP (Pred p) x)) Source #

type PP (Pred p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (Pred p :: Type) x = PP p x

data ToEnum (t :: Type) p Source #

Instances
P (ToEnumT t p) x => P (ToEnum t p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (ToEnum t p) x :: Type Source #

Methods

eval :: MonadEval m => proxy (ToEnum t p) -> POpts -> x -> m (TT (PP (ToEnum t p) x)) Source #

type PP (ToEnum t p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (ToEnum t p :: Type) x

data ToEnum' t p Source #

unsafe toEnum function

>>> pz @(ToEnum Char Id) 120
PresentT 'x'
>>> pl @(Map (FromEnum Id) Id >> Map (Id - 97 >> ToEnum Ordering Id) Id) ("abcde" :: String)
Error ToEnum IO e=Prelude.Enum.Ordering.toEnum: bad argument(2) ([97,98,99,100,101] (>>) rhs failed)
FailT "ToEnum IO e=Prelude.Enum.Ordering.toEnum: bad argument(2)"
>>> pl @((ToEnum Day Id *** ToEnum Day Id) >> EnumFromTo (Fst Id) (Snd Id)) (0,5)
Present [1858-11-17,1858-11-18,1858-11-19,1858-11-20,1858-11-21,1858-11-22] ((>>) [1858-11-17,1858-11-18,1858-11-19,1858-11-20,1858-11-21,1858-11-22] | {1858-11-17 ... 1858-11-22})
PresentT [1858-11-17,1858-11-18,1858-11-19,1858-11-20,1858-11-21,1858-11-22]
Instances
(PP p x ~ a, P p x, Show a, Enum (PP t x), Show (PP t x), Integral a) => P (ToEnum' t p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

Associated Types

type PP (ToEnum' t p) x :: Type Source #

Methods

eval :: MonadEval m => proxy (ToEnum' t p) -> POpts -> x -> m (TT (PP (ToEnum' t p) x)) Source #

type PP (ToEnum' t p :: Type) x Source # 
Instance details

Defined in Predicate.Data.Enum

type PP (ToEnum' t p :: Type) x = PP t x