Safe Haskell | None |
---|---|
Language | Haskell2010 |
- boolean methods
- regex methods
- tuple methods
- character methods
- date time methods
- numeric methods
- proxy methods
- read / show methods
- arrow methods
- compare methods
- enum methods
- wrap / unwrap methods
- list / foldable methods
- maybe methods
- either methods
- semigroup / monoid methods
- indexing methods
- these methods
- fold / unfold methods
- failure methods
- zip methods
- conditional methods
- parallel methods
- IO methods
- string methods
- printf methods
- higher order methods
- expression combinators
- miscellaneous
Dsl for evaluating and displaying type level expressions
Contains instances of the class P
for evaluating expressions at the type level.
Synopsis
- data (p :: k) && (q :: k1)
- data (p :: k) || (q :: k1)
- data (p :: k) ~> (q :: k1)
- data Not p
- data Ands p
- data Ors p
- type Asc = Ands (Map (Fst Id <= Snd Id) Pairs)
- type Asc' = Ands (Map (Fst Id < Snd Id) Pairs)
- type Desc = Ands (Map (Fst Id >= Snd Id) Pairs)
- type Desc' = Ands (Map (Fst Id > Snd Id) Pairs)
- type Between p q = Ge p && Le q
- type (<..>) p q = Ge p && Le q
- type Between' p q r = (r >= p) && (r <= q)
- type All x p = Ands (Map x p)
- type Any x p = Ors (Map x p)
- type AllPositive = Ands (Map Positive Id)
- type AllPositive' = FoldMap All (Map Positive Id)
- type Positive = Gt 0
- type AllNegative = Ands (Map Negative Id)
- type AllNegative' = FoldMap All (Map Negative Id)
- type Negative = Lt 0
- type Re p q = Re' '[] p q
- data Re' (rs :: [ROpt]) p q
- type Rescan p q = Rescan' '[] p q
- data Rescan' (rs :: [ROpt]) p q
- type RescanRanges p q = RescanRanges' '[] p q
- data RescanRanges' (rs :: [ROpt]) p q
- type Resplit p q = Resplit' '[] p q
- data Resplit' (rs :: [ROpt]) p q
- type ReplaceAll p q r = ReplaceAll' '[] p q r
- type ReplaceAll' (rs :: [ROpt]) p q r = ReplaceImpl True rs p q r
- type ReplaceOne p q r = ReplaceOne' '[] p q r
- type ReplaceOne' (rs :: [ROpt]) p q r = ReplaceImpl False rs p q r
- type ReplaceAllString p q r = ReplaceAllString' '[] p q r
- type ReplaceAllString' (rs :: [ROpt]) p q r = ReplaceAll' rs p (MakeRR q) r
- type ReplaceOneString p q r = ReplaceOneString' '[] p q r
- type ReplaceOneString' (rs :: [ROpt]) p q r = ReplaceOne' rs p (MakeRR q) r
- data MakeRR p
- data MakeRR1 p
- data MakeRR2 p
- data MakeRR3 p
- data Fst p
- data Snd p
- data Thd p
- type L1 p = Fst p
- type L2 p = Snd p
- type L3 p = Thd p
- data L4 p
- data L5 p
- data L6 p
- type Dup = '(Id, Id)
- data Swap
- data Assoc
- data Unassoc
- data ReverseTupleN
- data TupleI (ps :: [k])
- data Pairs
- data CharSet
- = CLower
- | CUpper
- | CNumber
- | CSpace
- | CPunctuation
- | CControl
- | CHexDigit
- | COctDigit
- | CSeparator
- | CLatin1
- type IsLower = IsCharSet CLower
- type IsUpper = IsCharSet CUpper
- type IsNumber = IsCharSet CNumber
- type IsSpace = IsCharSet CSpace
- type IsPunctuation = IsCharSet CPunctuation
- type IsControl = IsCharSet CControl
- type IsHexDigit = IsCharSet CHexDigit
- type IsOctDigit = IsCharSet COctDigit
- type IsSeparator = IsCharSet CSeparator
- type IsLatin1 = IsCharSet CLatin1
- data FormatTimeP p q
- type ParseTimeP (t :: Type) p q = ParseTimeP' (Hole t) p q
- data ParseTimeP' t p q
- type ParseTimes (t :: Type) p q = ParseTimes' (Hole t) p q
- data ParseTimes' t p q
- type MkDay = MkDay' (Fst Id) (Snd Id) (Thd Id)
- data MkDay' p q r
- data UnMkDay p
- type (+) p q = Add p q
- type (-) p q = Sub p q
- type * p q = Mult p q
- data p / q
- data p % q
- type (%-) p q = Negate (p % q)
- type (-%) p q = Negate (p % q)
- data Negate p
- data Abs p
- data Signum p
- type FromInteger (t :: Type) p = FromInteger' (Hole t) p
- data FromInteger' t n
- type FromIntegral (t :: Type) p = FromIntegral' (Hole t) p
- data FromIntegral' t n
- data ToRational p
- type FromRational (t :: Type) p = FromRational' (Hole t) p
- data FromRational' t r
- type Truncate (t :: Type) p = Truncate' (Hole t) p
- data Truncate' t p
- type Ceiling (t :: Type) p = Ceiling' (Hole t) p
- data Ceiling' t p
- type Floor (t :: Type) p = Floor' (Hole t) p
- data Floor' t p
- type Even = Mod I 2 == 0
- type Odd = Mod I 2 == 1
- data Div p q
- data Mod p q
- data DivMod p q
- data QuotRem p q
- type Quot p q = Fst (QuotRem p q)
- type Rem p q = Snd (QuotRem p q)
- data MkProxy
- type ProxyT (t :: Type) = ProxyT' (Hole t)
- data ProxyT' t
- data Unproxy
- data ShowP p
- type ReadP (t :: Type) = ReadP'' (Hole t) Id
- type ReadP' (t :: Type) p = ReadP'' (Hole t) p
- data ReadP'' t p
- type ReadBase (t :: Type) (n :: Nat) = ReadBase' (Hole t) n Id
- data ReadBase' t (n :: Nat) p
- type ReadBaseInt (n :: Nat) = ReadBase' (Hole Int) n Id
- type ShowBase (n :: Nat) = ShowBase' n Id
- data ShowBase' (n :: Nat) p
- type (&&&) p q = W '(p, q)
- data (p :: k) *** (q :: k1)
- type First p = p *** I
- type Second q = I *** q
- data (p :: k) ||| (q :: k1)
- data (p :: k) +++ (q :: k1)
- type (>) p q = Cmp Cgt p q
- type (>=) p q = Cmp Cge p q
- type (==) p q = Cmp Ceq p q
- type (/=) p q = Cmp Cne p q
- type (<=) p q = Cmp Cle p q
- type (<) p q = Cmp Clt p q
- type (>~) p q = CmpI Cgt p q
- type (>=~) p q = CmpI Cge p q
- type (==~) p q = CmpI Ceq p q
- type (/=~) p q = CmpI Cne p q
- type (<=~) p q = CmpI Cle p q
- type (<~) p q = CmpI Clt p q
- type Gt n = Cmp Cgt I n
- type Ge n = Cmp Cge I n
- type Same n = Cmp Ceq I n
- type Le n = Cmp Cle I n
- type Lt n = Cmp Clt I n
- type Ne n = Cmp Cne I n
- data OrdP p q
- type (==!) p q = OrdP p q
- type OrdA' p q = OrdP (Fst Id >> p) (Snd Id >> q)
- type OrdA p = OrdA' p p
- data OrdI p q
- type (===~) p q = OrdI p q
- data Cmp (o :: OrderingP) p q
- data CmpI (o :: OrderingP) p q
- data Succ p
- data Pred p
- data FromEnum p
- type ToEnum (t :: Type) p = ToEnum' (Hole t) p
- data ToEnum' t p
- data EnumFromTo p q
- data SuccB p q
- type SuccB' q = SuccB (Failp "Succ bounded failed") q
- data PredB p q
- type PredB' q = PredB (Failp "Pred bounded failed") q
- type ToEnumB (t :: Type) def = ToEnumB' (Hole t) def
- data ToEnumB' t def
- type ToEnumBF (t :: Type) = ToEnumB' (Hole t) (Failp "ToEnum bounded failed")
- data Unwrap p
- type Wrap (t :: Type) p = Wrap' (Hole t) p
- data Wrap' t p
- data Coerce (t :: k)
- data Coerce2 (t :: k)
- data Map p q
- data Concat p
- type ConcatMap p q = Concat (Map p q)
- data Partition p q
- type FilterBy p q = Partition p q >> Fst Id
- data Break p q
- type Span p q = Break (Not p) q
- data Intercalate p q
- data Elem p q
- data Inits
- data Tails
- data Ones p
- type OneP = Guard (Printf "expected list of length 1 but found length=%d" Len) (Len == 1) >> Head
- data Len
- data Length p
- type PadL n p q = Pad True n p q
- type PadR n p q = Pad False n p q
- data SplitAts ns p
- data SplitAt n p
- type Take n p = Fst (SplitAt n p)
- type Drop n p = Snd (SplitAt n p)
- type Head = Uncons >> Just (Fst Id)
- type Tail = Uncons >> Just (Snd Id)
- type Init = Unsnoc >> Just (Fst Id)
- type Last = Unsnoc >> Just (Snd Id)
- data Min
- data Max
- data Sum
- data IsEmpty
- data Null
- data ToList
- data ToList' p
- type IToList (t :: Type) = IToList' (Hole t) Id
- data IToList' t p
- data ToListExt
- data FromList (t :: Type)
- data FromListExt (t :: Type)
- type EmptyList (t :: Type) = EmptyList' (Hole t)
- data EmptyList' t
- type Singleton p = p :+ EmptyT [] p
- data Reverse
- data ReverseL
- data SortBy p q
- type SortOn p q = SortBy (OrdA p) q
- type SortOnDesc p q = SortBy (Swap >> OrdA p) q
- type Remove p q = KeepImpl False p q
- type Keep p q = KeepImpl True p q
- type HeadDef p q = GDef (Uncons >> Fmap_1) p q
- type HeadP q = GProxy (Uncons >> Fmap_1) q
- type HeadFail msg q = GFail (Uncons >> Fmap_1) msg q
- type TailDef p q = GDef (Uncons >> Fmap_2) p q
- type TailP q = GProxy (Uncons >> Fmap_2) q
- type TailFail msg q = GFail (Uncons >> Fmap_2) msg q
- type LastDef p q = GDef (Unsnoc >> Fmap_2) p q
- type LastP q = GProxy (Unsnoc >> Fmap_2) q
- type LastFail msg q = GFail (Unsnoc >> Fmap_2) msg q
- type InitDef p q = GDef (Unsnoc >> Fmap_1) p q
- type InitP q = GProxy (Unsnoc >> Fmap_1) q
- type InitFail msg q = GFail (Unsnoc >> Fmap_1) msg q
- type Head' p = HeadFail "Head(empty)" p
- type Tail' p = TailFail "Tail(empty)" p
- type Last' p = LastFail "Last(empty)" p
- type Init' p = InitFail "Init(empty)" p
- type MkNothing (t :: Type) = MkNothing' (Hole t)
- data MkNothing' t
- data MkJust p
- type IsNothing = MaybeIn True False
- type IsJust = MaybeIn False True
- type MapMaybe p q = ConcatMap (p >> MaybeIn MEmptyP '[Id]) q
- type CatMaybes q = MapMaybe Id q
- type Just' p = JustFail "expected Just" p
- type JustDef p q = GDef I p q
- type JustP q = GProxy I q
- type JustFail msg q = GFail I msg q
- type MaybeX p q r = MaybeXP (Fst Id >> p) q r
- data MaybeIn p q
- data MaybeBool b p
- type JustDef' p q r = GDef' I p q r
- type JustDef'' p q r = GDef'' I p q r
- type JustDef''' p q r = GDef_X I p q r
- data PartitionEithers
- type IsLeft = True ||| False
- type IsRight = False ||| True
- type MkLeft (t :: Type) p = MkLeft' (Hole t) p
- data MkLeft' t p
- type MkRight (t :: Type) p = MkRight' (Hole t) p
- data MkRight' t p
- type Left' p = LeftFail "expected Left" p
- type Right' p = RightFail "expected Right" p
- type LeftDef p q = GDef LeftToMaybe p q
- type LeftP q = GProxy LeftToMaybe q
- type LeftFail msg q = GFail LeftToMaybe msg q
- type RightDef p q = GDef RightToMaybe p q
- type RightP q = GProxy RightToMaybe q
- type RightFail msg q = GFail RightToMaybe msg q
- data EitherBool b p q
- type MkRightAlt t p = Pure (Either t) p
- type MkLeftAlt t p = MkRightAlt t p >> Swap
- type EitherIn p q = p ||| q
- data p <> q
- data MConcat p
- data STimes n p
- type Ands' p = FoldMap All p
- type Ors' p = FoldMap Any p
- type Min' (t :: Type) = FoldMap (Min t) Id
- type Max' (t :: Type) = FoldMap (Max t) Id
- type Sum' (t :: Type) = FoldMap (Sum t) Id
- type Sapa = Fst Id <> Snd Id
- type Sapa' (t :: Type) = Wrap t (Fst Id) <> Wrap t (Snd Id)
- type MEmptyT (t :: Type) = MEmptyT' (Hole t)
- data MEmptyT' t
- type MEmptyP = MEmptyT' Unproxy
- type MEmptyT2 t = MEmptyT2' (Hole t)
- data MEmptyT2' t
- data Ix (n :: Nat) def
- type Ix' (n :: Nat) = Ix n (Failp "Ix index not found")
- data IxL p q def
- type (!!) p q = IxL p q (Failp "(!!) index not found")
- data Lookup p q
- type (!!!) p q = Lookup p q >> MaybeIn (Failp "index not found") Id
- type Lookup' (t :: Type) p q = (q &&& Lookup p q) >> If (Snd Id >> IsNothing) (ShowP (Fst Id) >> Fail (Hole t) (Printf "index(%s) not found" Id)) (Snd Id >> Just Id)
- type LookupDef x y p = LookupDef' x y p I
- type LookupDef' x y p q = GDef (Lookup x y) p q
- type LookupP x y = LookupP' x y I
- type LookupP' x y q = GProxy (Lookup x y) q
- type LookupFail msg x y = LookupFail' msg x y I
- type LookupFail' msg x y q = GFail (Lookup x y) msg q
- data p :+ q
- data p +: q
- data Uncons
- data Unsnoc
- data PartitionThese
- type Thiss = Fst PartitionThese
- type Thats = Snd PartitionThese
- type Theses = Thd PartitionThese
- type This' p = ThisFail "expected This" p
- type That' p = ThatFail "expected That" p
- type IsThis p = IsTh (This ()) p
- type IsThat p = IsTh (That ()) p
- type IsThese p = IsTh (These () ()) p
- type MkThis (t :: Type) p = MkThis' (Hole t) p
- data MkThis' t p
- type MkThat (t :: Type) p = MkThat' (Hole t) p
- data MkThat' t p
- data MkThese p q
- type ThisDef p q = GDef ThisToMaybe p q
- type ThisP q = GProxy ThisToMaybe q
- type ThisFail msg q = GFail ThisToMaybe msg q
- type ThatDef p q = GDef ThatToMaybe p q
- type ThatP q = GProxy ThatToMaybe q
- type ThatFail msg q = GFail ThatToMaybe msg q
- type TheseDef p q = GDef TheseToMaybe p q
- type TheseP q = GProxy TheseToMaybe q
- type TheseFail msg q = GFail TheseToMaybe msg q
- data TheseIn p q r
- type TheseIn' p = TheseFail "expected These" p
- type TheseId p q = TheseIn '(I, p) '(q, I) I
- data TheseX p q r s
- data Scanl p q r
- type ScanN n p q = Scanl (Fst Id >> q) p (EnumFromTo 1 n)
- type ScanNA q = ScanN (Fst Id) (Snd Id) q
- type FoldN n p q = Last' (ScanN n p q)
- type Foldl p q r = Last' (Scanl p q r)
- data Unfoldr p q
- type IterateN n f = Unfoldr (MaybeBool (Fst Id > 0) '(Snd Id, Pred Id *** f)) '(n, Id)
- type IterateUntil p f = IterateWhile (Not p) f
- type IterateWhile p f = Unfoldr (MaybeBool p '(Id, f)) Id
- type IterateNWhile n p f = '(n, Id) >> (IterateWhile ((Fst Id > 0) && (Snd Id >> p)) (Pred Id *** f) >> Map (Snd Id) Id)
- type IterateNUntil n p f = IterateNWhile n (Not p) f
- data Fail t prt
- type Failp s = Fail Unproxy s
- type Failt (t :: Type) prt = Fail (Hole t) prt
- type FailS s = Fail I s
- type FailPrt (t :: Type) prt = Fail (Hole t) (Printf prt)
- type FailPrt2 (t :: Type) prt = Fail (Hole t) (Printf2 prt)
- data Catch p q
- type Catch' p s = Catch p (FailCatch s)
- data ZipThese p q
- type ZipL p q = Zip True False p q
- type ZipR p q = Zip False True p q
- type ZipTrunc p q = Zip False False p q
- type Unzip = '(Map (Fst Id) Id, Map (Snd Id) Id)
- data If p q r
- data Case (e :: k0) (ps :: [k]) (qs :: [k1]) (r :: k2)
- type Case' (ps :: [k]) (qs :: [k1]) (r :: k2) = Case (Snd Id >> Failp "Case:no match") ps qs r
- type Case'' s (ps :: [k]) (qs :: [k1]) (r :: k2) = Case (FailCase s) ps qs r
- type Guards (os :: [(k, k1)]) = GuardsImplW True os
- type GuardsLax (os :: [(k, k1)]) = GuardsImplW False os
- type GuardsQuick (prt :: k) (os :: [k1]) = Guards (ToGuardsT prt os)
- type GuardsQuickLax (prt :: k) (os :: [k1]) = GuardsLax (ToGuardsT prt os)
- data Guard prt p
- type Guard' p = Guard "Guard" p
- type ExitWhen prt p = Guard prt (Not p)
- type ExitWhen' p = ExitWhen "ExitWhen" p
- data GuardSimple p
- type Guards' (ps :: [k]) = Para (GuardsT ps)
- type ToGuards (prt :: k) (os :: [k1]) = Proxy (Guards (ToGuardsT prt os))
- type GuardsN prt (n :: Nat) p = GuardsNImpl True prt n p
- type GuardsNLax prt (n :: Nat) p = GuardsNImpl False prt n p
- type GuardsDetail (prt :: Symbol) (os :: [(k0, k1)]) = GuardsImplXX True (ToGuardsDetailT prt os)
- type ToPara (os :: [k]) = Proxy (ParaImplW True os)
- type Para (os :: [k]) = ParaImplW True os
- type ParaLax (os :: [k]) = ParaImplW False os
- type ParaN (n :: Nat) p = ParaNImpl True n p
- type ParaNLax (n :: Nat) p = ParaNImpl False n p
- data Repeat (n :: Nat) p
- data ReadFile p
- type FileExists p = ReadFile p >> IsJust
- data ReadDir p
- type DirExists p = ReadDir p >> IsJust
- data ReadEnv p
- data ReadEnvAll
- data TimeUtc
- data TimeZt
- type AppendFile (s :: Symbol) p = WriteFileImpl (FOther s WFAppend) p
- type WriteFile (s :: Symbol) p = WriteFileImpl (FOther s WFWrite) p
- type WriteFile' (s :: Symbol) p = WriteFileImpl (FOther s WFWriteForce) p
- type Stdout p = WriteFileImpl FStdout p
- type Stderr p = WriteFileImpl FStderr p
- data Stdin
- data ToLower
- data ToUpper
- type Trim p = Trim' True True p
- type TrimStart p = Trim' True False p
- type TrimEnd p = Trim' False True p
- data StripLR (right :: Bool) p q
- type StripRight p q = StripLR True p q
- type StripLeft p q = StripLR False p q
- type IsPrefix p q = IsFixImpl LT False p q
- type IsInfix p q = IsFixImpl EQ False p q
- type IsSuffix p q = IsFixImpl GT False p q
- type IsPrefixI p q = IsFixImpl LT True p q
- type IsInfixI p q = IsFixImpl EQ True p q
- type IsSuffixI p q = IsFixImpl GT True p q
- type FromStringP (t :: Type) p = FromStringP' (Hole t) p
- data FromStringP' t s
- data Printf s p
- data Printfn s p
- type Printfnt (n :: Nat) s = Printfn s (TupleList n)
- type PrintfntLax (n :: Nat) s = Printfn s (TupleListLax n)
- type Printf2 s = Printfn s '(Fst Id, '(Snd Id, ()))
- type Printf3 s = Printfn s '(Fst Id, '(Snd Id, '(Thd Id, ())))
- type Printf3' s = Printfn s (TupleI '[Fst Id, Snd Id, Thd Id])
- data Pure (t :: Type -> Type) p
- data Pure2 (t :: Type -> Type)
- type FoldMap (t :: Type) p = Map (Wrap t Id) p >> Unwrap (MConcat Id)
- data p <$ q
- data p <* q
- type (*>) p q = q <* p
- data Fmap_1
- data Fmap_2
- data Sequence
- type Traverse p q = Map p q >> Sequence
- data Join
- data EmptyT (t :: Type -> Type) p
- data p <|> q
- data Extract
- data Duplicate
- data p $ q
- data q & p
- data Do (ps :: [k])
- data (p :: k) >> (q :: k1)
- type (<<) p q = q >> p
- data DoN (n :: Nat) p
- data Prime p
- data Luhn p
- data Char1 (s :: Symbol)
- data Hide p
- data Hole (t :: Type)
- type H = Hide
- data Skip p
- type (|>) p q = Skip p >> q
- type (>|) p q = p >> Skip q
boolean methods
data (p :: k) && (q :: k1) infixr 3 Source #
similar to &&
>>>
pl @(Fst Id && Snd Id) (True, True)
True TrueT
>>>
pl @(Id > 15 && Id < 17) 16
True TrueT
>>>
pl @(Id > 15 && Id < 17) 30
False FalseT
>>>
pl @(Fst Id && (Length (Snd Id) >= 4)) (True,[11,12,13,14])
True TrueT
>>>
pl @(Fst Id && (Length (Snd Id) == 4)) (True,[12,11,12,13,14])
False FalseT
data (p :: k) || (q :: k1) infixr 2 Source #
similar to ||
>>>
pl @(Fst Id || (Length (Snd Id) >= 4)) (False,[11,12,13,14])
True TrueT
>>>
pl @(Not (Fst Id) || (Length (Snd Id) == 4)) (True,[12,11,12,13,14])
False FalseT
data (p :: k) ~> (q :: k1) infixr 1 Source #
implication
>>>
pl @(Fst Id ~> (Length (Snd Id) >= 4)) (True,[11,12,13,14])
True TrueT
>>>
pl @(Fst Id ~> (Length (Snd Id) == 4)) (True,[12,11,12,13,14])
False FalseT
>>>
pl @(Fst Id ~> (Length (Snd Id) == 4)) (False,[12,11,12,13,14])
True TrueT
>>>
pl @(Fst Id ~> (Length (Snd Id) >= 4)) (False,[11,12,13,14])
True TrueT
not
function
>>>
pl @(Not Id) False
True TrueT
>>>
pl @(Not Id) True
False FalseT
>>>
pl @(Not (Fst Id)) (True,22)
False FalseT
>>>
pl @(Ands Id) [True,True,True]
True TrueT
>>>
pl @(Ands Id) [True,True,True,False]
False FalseT
>>>
pl @(Ands Id) []
True TrueT
>>>
pl @(Ors Id) [False,False,False]
False FalseT
>>>
pl @(Ors Id) [True,True,True,False]
True TrueT
>>>
pl @(Ors Id) []
False FalseT
type Asc = Ands (Map (Fst Id <= Snd Id) Pairs) Source #
a type level predicate for a monotonic increasing list
>>>
pl @Asc "aaacdef"
True TrueT
>>>
pl @Asc [1,2,3,4,5,5,7]
True TrueT
>>>
pl @Asc' [1,2,3,4,5,5,7]
False FalseT
>>>
pl @Asc "axacdef"
False FalseT
a type level predicate for a monotonic increasing list
type Asc' = Ands (Map (Fst Id < Snd Id) Pairs) Source #
a type level predicate for a strictly increasing list
type Desc = Ands (Map (Fst Id >= Snd Id) Pairs) Source #
a type level predicate for a monotonic decreasing list
type Desc' = Ands (Map (Fst Id > Snd Id) Pairs) Source #
a type level predicate for a strictly decreasing list
type Between p q = Ge p && Le q Source #
A predicate that determines if the value is between 'p' and 'q'
>>>
pl @(Between' 5 8 Len) [1,2,3,4,5,5,7]
True TrueT
>>>
pl @(Between 5 8) 6
True TrueT
>>>
pl @(Between 5 8) 9
False FalseT
>>>
pl @(10 % 4 <..> 40 % 5) 4
True TrueT
>>>
pl @(10 % 4 <..> 40 % 5) 33
False FalseT
type All x p = Ands (Map x p) Source #
similar to all
>>>
pl @(All Even Id) [1,5,11,5,3]
False FalseT
>>>
pl @(All Odd Id) [1,5,11,5,3]
True TrueT
>>>
pl @(All Odd Id) []
True TrueT
type Any x p = Ors (Map x p) Source #
similar to any
>>>
pl @(Any Even Id) [1,5,11,5,3]
False FalseT
>>>
pl @(Any Even Id) [1,5,112,5,3]
True TrueT
>>>
pl @(Any Even Id) []
False FalseT
type AllPositive = Ands (Map Positive Id) Source #
a type level predicate for all positive elements in a list
>>>
pl @AllPositive [1,5,10,2,3]
True TrueT
>>>
pl @AllPositive [0,1,5,10,2,3]
False FalseT
>>>
pl @AllPositive [3,1,-5,10,2,3]
False FalseT
>>>
pl @AllNegative [-1,-5,-10,-2,-3]
True TrueT
type AllNegative = Ands (Map Negative Id) Source #
a type level predicate for all negative elements in a list
regex methods
data Re' (rs :: [ROpt]) p q Source #
represents a predicate using a Symbol
as a regular expression
evaluates Re
and returns True if there is a match
>>>
pl @(Re "^\\d{2}:\\d{2}:\\d{2}$" Id) "13:05:25"
True TrueT
data Rescan' (rs :: [ROpt]) p q Source #
runs a regex matcher returning the original values and optionally any groups
>>>
pl @(Rescan "^(\\d{2}):(\\d{2}):(\\d{2})$" Id) "13:05:25"
Present [("13:05:25",["13","05","25"])] PresentT [("13:05:25",["13","05","25"])]
>>>
pl @(Rescan (Snd Id) "13:05:25") ('a',"^(\\d{2}):(\\d{2}):(\\d{2})$")
Present [("13:05:25",["13","05","25"])] PresentT [("13:05:25",["13","05","25"])]
type RescanRanges p q = RescanRanges' '[] p q Source #
data RescanRanges' (rs :: [ROpt]) p q Source #
similar to Rescan
but gives the column start and ending positions instead of values
>>>
pl @(RescanRanges "^(\\d{2}):(\\d{2}):(\\d{2})$" Id) "13:05:25"
Present [((0,8),[(0,2),(3,5),(6,8)])] PresentT [((0,8),[(0,2),(3,5),(6,8)])]
Instances
(GetROpts rs, PP p x ~ String, PP q x ~ String, P p x, P q x) => P (RescanRanges' rs p q :: Type) x Source # | |
Defined in Predicate.Prelude type PP (RescanRanges' rs p q) x :: Type Source # eval :: MonadEval m => Proxy (RescanRanges' rs p q) -> POpts -> x -> m (TT (PP (RescanRanges' rs p q) x)) Source # | |
type PP (RescanRanges' rs p q :: Type) x Source # | |
Defined in Predicate.Prelude |
data Resplit' (rs :: [ROpt]) p q Source #
splits a string on a regex delimiter
>>>
pl @(Resplit "\\." Id) "141.201.1.22"
Present ["141","201","1","22"] PresentT ["141","201","1","22"]
>>>
pl @(Resplit (Singleton (Fst Id)) (Snd Id)) (':', "12:13:1")
Present ["12","13","1"] PresentT ["12","13","1"]
type ReplaceAll p q r = ReplaceAll' '[] p q r Source #
type ReplaceAll' (rs :: [ROpt]) p q r = ReplaceImpl True rs p q r Source #
type ReplaceOne p q r = ReplaceOne' '[] p q r Source #
type ReplaceOne' (rs :: [ROpt]) p q r = ReplaceImpl False rs p q r Source #
type ReplaceAllString p q r = ReplaceAllString' '[] p q r Source #
type ReplaceAllString' (rs :: [ROpt]) p q r = ReplaceAll' rs p (MakeRR q) r Source #
type ReplaceOneString p q r = ReplaceOneString' '[] p q r Source #
type ReplaceOneString' (rs :: [ROpt]) p q r = ReplaceOne' rs p (MakeRR q) r Source #
Simple replacement string: see ReplaceAllString
and ReplaceOneString
A replacement function (String -> [String] -> String) which returns the whole match and the groups
Used by sub
and gsub
Requires Text.Show.Functions
A replacement function (String -> String) that yields the whole match
Used by sub
and gsub
Requires Text.Show.Functions
>>>
:m + Text.Show.Functions
>>>
pl @(ReplaceAll "\\." (MakeRR2 (Fst Id)) (Snd Id)) (\x -> x <> ":" <> x, "141.201.1.22")
Present "141.:.201.:.1.:.22" PresentT "141.:.201.:.1.:.22"
A replacement function ([String] -> String) which yields the groups
Used by sub
and gsub
Requires Text.Show.Functions
>>>
:m + Text.Show.Functions
>>>
pl @(ReplaceAll "^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$" (MakeRR3 (Fst Id)) (Snd Id)) (\ys -> intercalate " | " $ map (show . succ . read @Int) ys, "141.201.1.22")
Present "142 | 202 | 2 | 23" PresentT "142 | 202 | 2 | 23"
tuple methods
similar to fst
>>>
pl @(Fst Id) (10,"Abc")
Present 10 PresentT 10
>>>
pl @(Fst Id) (10,"Abc",'x')
Present 10 PresentT 10
>>>
pl @(Fst Id) (10,"Abc",'x',False)
Present 10 PresentT 10
similar to snd
>>>
pl @(Snd Id) (10,"Abc")
Present "Abc" PresentT "Abc"
>>>
pl @(Snd Id) (10,"Abc",True)
Present "Abc" PresentT "Abc"
similar to 3rd element in a n-tuple
>>>
pl @(Thd Id) (10,"Abc",133)
Present 133 PresentT 133
>>>
pl @(Thd Id) (10,"Abc",133,True)
Present 133 PresentT 133
similar to 4th element in a n-tuple
>>>
pl @(L4 Id) (10,"Abc",'x',True)
Present True PresentT True
>>>
pl @(L4 (Fst (Snd Id))) ('x',((10,"Abc",'x',999),"aa",1),9)
Present 999 PresentT 999
similar to 5th element in a n-tuple
>>>
pl @(L5 Id) (10,"Abc",'x',True,1)
Present 1 PresentT 1
similar to 6th element in a n-tuple
>>>
pl @(L6 Id) (10,"Abc",'x',True,1,99)
Present 99 PresentT 99
swaps using swap
>>>
pl @Swap (Left 123)
Present Right 123 PresentT (Right 123)
>>>
pl @Swap (Right 123)
Present Left 123 PresentT (Left 123)
>>>
pl @Swap (These 'x' 123)
Present These 123 'x' PresentT (These 123 'x')
>>>
pl @Swap (This 'x')
Present That 'x' PresentT (That 'x')
>>>
pl @Swap (That 123)
Present This 123 PresentT (This 123)
>>>
pl @Swap (123,'x')
Present ('x',123) PresentT ('x',123)
>>>
pl @Swap (Left "abc")
Present Right "abc" PresentT (Right "abc")
>>>
pl @Swap (Right 123)
Present Left 123 PresentT (Left 123)
assoc using assoc
>>>
pl @Assoc (This (These 123 'x'))
Present These 123 (This 'x') PresentT (These 123 (This 'x'))
>>>
pl @Assoc ((99,'a'),True)
Present (99,('a',True)) PresentT (99,('a',True))
>>>
pl @Assoc ((99,'a'),True)
Present (99,('a',True)) PresentT (99,('a',True))
>>>
pl @Assoc (Right "Abc" :: Either (Either () ()) String)
Present Right (Right "Abc") PresentT (Right (Right "Abc"))
>>>
pl @Assoc (Left (Left 'x'))
Present Left 'x' PresentT (Left 'x')
unassoc using unassoc
>>>
pl @Unassoc (These 123 (This 'x'))
Present This (These 123 'x') PresentT (This (These 123 'x'))
>>>
pl @Unassoc (99,('a',True))
Present ((99,'a'),True) PresentT ((99,'a'),True)
>>>
pl @Unassoc (This 10 :: These Int (These Bool ()))
Present This (This 10) PresentT (This (This 10))
>>>
pl @Unassoc (Right (Right 123))
Present Right 123 PresentT (Right 123)
>>>
pl @Unassoc (Left 'x' :: Either Char (Either Bool Double))
Present Left (Left 'x') PresentT (Left (Left 'x'))
data ReverseTupleN Source #
reverses inductive tuples
>>>
pl @ReverseTupleN (1,('a',(True,("def",()))))
Present ("def",(True,('a',(1,())))) PresentT ("def",(True,('a',(1,()))))
>>>
pl @ReverseTupleN (1,('a',()))
Present ('a',(1,())) PresentT ('a',(1,()))
>>>
pl @ReverseTupleN (999,())
Present (999,()) PresentT (999,())
Instances
(ReverseTupleC tp, Show (ReverseTupleP tp), Show tp) => P ReverseTupleN tp Source # | |
Defined in Predicate.Prelude type PP ReverseTupleN tp :: Type Source # eval :: MonadEval m => Proxy ReverseTupleN -> POpts -> tp -> m (TT (PP ReverseTupleN tp)) Source # | |
type PP ReverseTupleN tp Source # | |
Defined in Predicate.Prelude |
data TupleI (ps :: [k]) Source #
create inductive tuples from a type level list of predicates
>>>
pl @(TupleI '[Id,ShowP Id,Pred Id,W "str", W 999]) 666
Present (666,("666",(665,("str",(999,()))))) PresentT (666,("666",(665,("str",(999,())))))
>>>
pl @(TupleI '[W 999,W "somestring",W 'True, Id, ShowP (Pred Id)]) 23
Present (999,("somestring",(True,(23,("22",()))))) PresentT (999,("somestring",(True,(23,("22",())))))
creates a list of overlapping pairs of elements. requires two or more elements
>>>
pl @Pairs [1,2,3,4]
Present [(1,2),(2,3),(3,4)] PresentT [(1,2),(2,3),(3,4)]
>>>
pl @Pairs []
Error Pairs no data found FailT "Pairs no data found"
>>>
pl @Pairs [1]
Error Pairs only one element found FailT "Pairs only one element found"
character methods
type IsLower = IsCharSet CLower Source #
predicate for determining if a string is all lowercase >>> pl @IsLower "abcdef213" False FalseT
>>>
pl @IsLower "abcdef"
True TrueT
>>>
pl @IsLower ""
True TrueT
>>>
pl @IsLower "abcdefG"
False FalseT
type IsNumber = IsCharSet CNumber Source #
predicate for determining if the string is all digits >>> pl @IsNumber "213G" False FalseT
>>>
pl @IsNumber "929"
True TrueT
type IsPunctuation = IsCharSet CPunctuation Source #
type IsHexDigit = IsCharSet CHexDigit Source #
type IsOctDigit = IsCharSet COctDigit Source #
type IsSeparator = IsCharSet CSeparator Source #
date time methods
data FormatTimeP p q Source #
type level expression representing a formatted time
similar to formatTime
using a type level Symbol
to get the formatting string
>>>
pl @(FormatTimeP "%F %T" Id) (read "2019-05-24 05:19:59" :: LocalTime)
Present "2019-05-24 05:19:59" PresentT "2019-05-24 05:19:59"
>>>
pl @(FormatTimeP (Fst Id) (Snd Id)) ("the date is %d/%m/%Y", read "2019-05-24" :: Day)
Present "the date is 24/05/2019" PresentT "the date is 24/05/2019"
Instances
(PP p x ~ String, FormatTime (PP q x), P p x, Show (PP q x), P q x) => P (FormatTimeP p q :: Type) x Source # | |
Defined in Predicate.Prelude type PP (FormatTimeP p q) x :: Type Source # eval :: MonadEval m => Proxy (FormatTimeP p q) -> POpts -> x -> m (TT (PP (FormatTimeP p q) x)) Source # | |
type PP (FormatTimeP p q :: Type) x Source # | |
Defined in Predicate.Prelude |
type ParseTimeP (t :: Type) p q = ParseTimeP' (Hole t) p q Source #
data ParseTimeP' t p q Source #
similar to parseTimeM
where 't' is the ParseTime
type, 'p' is the datetime format and 'q' points to the content to parse
>>>
pl @(ParseTimeP LocalTime "%F %T" Id) "2019-05-24 05:19:59"
Present 2019-05-24 05:19:59 PresentT 2019-05-24 05:19:59
>>>
pl @(ParseTimeP LocalTime "%F %T" "2019-05-24 05:19:59") (Right "never used")
Present 2019-05-24 05:19:59 PresentT 2019-05-24 05:19:59
keeping 'q' as we might want to extract from a tuple
Instances
(ParseTime (PP t a), Typeable (PP t a), Show (PP t a), P p a, P q a, PP p a ~ String, PP q a ~ String) => P (ParseTimeP' t p q :: Type) a Source # | |
Defined in Predicate.Prelude type PP (ParseTimeP' t p q) a :: Type Source # eval :: MonadEval m => Proxy (ParseTimeP' t p q) -> POpts -> a -> m (TT (PP (ParseTimeP' t p q) a)) Source # | |
type PP (ParseTimeP' t p q :: Type) a Source # | |
Defined in Predicate.Prelude |
type ParseTimes (t :: Type) p q = ParseTimes' (Hole t) p q Source #
data ParseTimes' t p q Source #
A convenience method to match against many different datetime formats to find a match
>>>
pl @(ParseTimes LocalTime '["%Y-%m-%d %H:%M:%S", "%m/%d/%y %H:%M:%S", "%B %d %Y %H:%M:%S", "%Y-%m-%dT%H:%M:%S"] "03/11/19 01:22:33") ()
Present 2019-03-11 01:22:33 PresentT 2019-03-11 01:22:33
>>>
pl @(ParseTimes LocalTime (Fst Id) (Snd Id)) (["%Y-%m-%d %H:%M:%S", "%m/%d/%y %H:%M:%S", "%B %d %Y %H:%M:%S", "%Y-%m-%dT%H:%M:%S"], "03/11/19 01:22:33")
Present 2019-03-11 01:22:33 PresentT 2019-03-11 01:22:33
Instances
(ParseTime (PP t a), Typeable (PP t a), Show (PP t a), P p a, P q a, PP p a ~ [String], PP q a ~ String) => P (ParseTimes' t p q :: Type) a Source # | |
Defined in Predicate.Prelude type PP (ParseTimes' t p q) a :: Type Source # eval :: MonadEval m => Proxy (ParseTimes' t p q) -> POpts -> a -> m (TT (PP (ParseTimes' t p q) a)) Source # | |
type PP (ParseTimes' t p q :: Type) a Source # | |
Defined in Predicate.Prelude |
create a Day
from three int values passed in as year month and day
>>>
pl @MkDay (2019,12,30)
Present Just (2019-12-30,1,1) PresentT (Just (2019-12-30,1,1))
>>>
pl @(MkDay' (Fst Id) (Snd Id) (Thd Id)) (2019,99,99999)
Present Nothing PresentT Nothing
>>>
pl @MkDay (1999,3,13)
Present Just (1999-03-13,10,6) PresentT (Just (1999-03-13,10,6))
uncreate a Day
returning year month and day
>>>
pl @(UnMkDay Id) (read "2019-12-30")
Present (2019,12,30) PresentT (2019,12,30)
numeric methods
fractional division
>>>
pl @(Fst Id / Snd Id) (13,2)
Present 6.5 PresentT 6.5
>>>
pl @(ToRational 13 / Id) 0
Error (/) zero denominator FailT "(/) zero denominator"
>>>
pl @(12 % 7 / 14 % 5 + Id) 12.4
Present 3188 % 245 PresentT (3188 % 245)
creates a Rational
value
>>>
pl @(Id < 21 % 5) (-3.1)
True TrueT
>>>
pl @(Id < 21 % 5) 4.5
False FalseT
>>>
pl @(Fst Id % Snd Id) (13,2)
Present 13 % 2 PresentT (13 % 2)
>>>
pl @(13 % Id) 0
Error MkRatio zero denominator FailT "MkRatio zero denominator"
>>>
pl @(4 % 3 + 5 % 7) "asfd"
Present 43 % 21 PresentT (43 % 21)
>>>
pl @(4 %- 7 * 5 %- 3) "asfd"
Present 20 % 21 PresentT (20 % 21)
>>>
pl @(Negate (14 % 3)) ()
Present (-14) % 3 PresentT ((-14) % 3)
>>>
pl @(14 % 3) ()
Present 14 % 3 PresentT (14 % 3)
>>>
pl @(Negate (14 % 3) ==! FromIntegral _ (Negate 5)) ()
Present GT PresentT GT
>>>
pl @(14 -% 3 ==! 5 %- 1) "aa"
Present GT PresentT GT
>>>
pl @(Negate (14 % 3) ==! Negate 5 % 2) ()
Present LT PresentT LT
>>>
pl @(14 -% 3 * 5 -% 1) ()
Present 70 % 3 PresentT (70 % 3)
>>>
pl @(14 % 3 ==! 5 % 1) ()
Present LT PresentT LT
>>>
pl @(15 % 3 / 4 % 2) ()
Present 5 % 2 PresentT (5 % 2)
similar to negate
>>>
pl @(Negate Id) 14
Present -14 PresentT (-14)
>>>
pl @(Negate (Fst Id * Snd Id)) (14,3)
Present -42 PresentT (-42)
>>>
pl @(Negate (15 %- 4)) "abc"
Present 15 % 4 PresentT (15 % 4)
>>>
pl @(Negate (15 % 3)) ()
Present (-5) % 1 PresentT ((-5) % 1)
>>>
pl @(Negate (Fst Id % Snd Id)) (14,3)
Present (-14) % 3 PresentT ((-14) % 3)
similar to abs
>>>
pl @(Abs Id) (-14)
Present 14 PresentT 14
>>>
pl @(Abs (Snd Id)) ("xx",14)
Present 14 PresentT 14
>>>
pl @(Abs Id) 0
Present 0 PresentT 0
>>>
pl @(Abs (Negate 44)) "aaa"
Present 44 PresentT 44
similar to signum
>>>
pl @(Signum Id) (-14)
Present -1 PresentT (-1)
>>>
pl @(Signum Id) 14
Present 1 PresentT 1
>>>
pl @(Signum Id) 0
Present 0 PresentT 0
type FromInteger (t :: Type) p = FromInteger' (Hole t) p Source #
data FromInteger' t n Source #
fromInteger
function where you need to provide the type 't' of the result
>>>
pl @(FromInteger (SG.Sum _) Id) 23
Present Sum {getSum = 23} PresentT (Sum {getSum = 23})
>>>
pl @(FromInteger Rational 44) 12
Present 44 % 1 PresentT (44 % 1)
>>>
pl @(FromInteger Rational Id) 12
Present 12 % 1 PresentT (12 % 1)
Instances
(Num (PP t a), Integral (PP n a), P n a, Show (PP t a)) => P (FromInteger' t n :: Type) a Source # | |
Defined in Predicate.Prelude type PP (FromInteger' t n) a :: Type Source # eval :: MonadEval m => Proxy (FromInteger' t n) -> POpts -> a -> m (TT (PP (FromInteger' t n) a)) Source # | |
type PP (FromInteger' t n :: Type) a Source # | |
Defined in Predicate.Prelude |
type FromIntegral (t :: Type) p = FromIntegral' (Hole t) p Source #
data FromIntegral' t n Source #
fromIntegral
function where you need to provide the type 't' of the result
>>>
pl @(FromIntegral (SG.Sum _) Id) 23
Present Sum {getSum = 23} PresentT (Sum {getSum = 23})
Instances
(Num (PP t a), Integral (PP n a), P n a, Show (PP t a), Show (PP n a)) => P (FromIntegral' t n :: Type) a Source # | |
Defined in Predicate.Prelude type PP (FromIntegral' t n) a :: Type Source # eval :: MonadEval m => Proxy (FromIntegral' t n) -> POpts -> a -> m (TT (PP (FromIntegral' t n) a)) Source # | |
type PP (FromIntegral' t n :: Type) a Source # | |
Defined in Predicate.Prelude |
data ToRational p Source #
toRational
function
>>>
pl @(ToRational Id) 23.5
Present 47 % 2 PresentT (47 % 2)
Instances
(a ~ PP p x, Show a, Real a, P p x) => P (ToRational p :: Type) x Source # | |
Defined in Predicate.Prelude type PP (ToRational p) x :: Type Source # eval :: MonadEval m => Proxy (ToRational p) -> POpts -> x -> m (TT (PP (ToRational p) x)) Source # | |
type PP (ToRational p :: Type) x Source # | |
Defined in Predicate.Prelude |
type FromRational (t :: Type) p = FromRational' (Hole t) p Source #
data FromRational' t r Source #
fromRational
function where you need to provide the type 't' of the result
>>>
pl @(FromRational Rational Id) 23.5
Present 47 % 2 PresentT (47 % 2)
Instances
(P r a, PP r a ~ Rational, Show (PP t a), Fractional (PP t a)) => P (FromRational' t r :: Type) a Source # | |
Defined in Predicate.Prelude type PP (FromRational' t r) a :: Type Source # eval :: MonadEval m => Proxy (FromRational' t r) -> POpts -> a -> m (TT (PP (FromRational' t r) a)) Source # | |
type PP (FromRational' t r :: Type) a Source # | |
Defined in Predicate.Prelude |
truncate
function where you need to provide the type 't' of the result
>>>
pl @(Truncate Int Id) (23 % 5)
Present 4 PresentT 4
ceiling
function where you need to provide the type 't' of the result
>>>
pl @(Ceiling Int Id) (23 % 5)
Present 5 PresentT 5
floor
function where you need to provide the type 't' of the result
>>>
pl @(Floor Int Id) (23 % 5)
Present 4 PresentT 4
type Even = Mod I 2 == 0 Source #
similar to even
>>>
pl @(Map Even Id) [9,-4,12,1,2,3]
Present [False,True,True,False,True,False] PresentT [False,True,True,False,True,False]
>>>
pl @(Map '(Even,Odd) Id) [9,-4,12,1,2,3]
Present [(False,True),(True,False),(True,False),(False,True),(True,False),(False,True)] PresentT [(False,True),(True,False),(True,False),(False,True),(True,False),(False,True)]
similar to div
>>>
pl @(Div (Fst Id) (Snd Id)) (10,4)
Present 2 PresentT 2
>>>
pl @(Div (Fst Id) (Snd Id)) (10,0)
Error Div zero denominator FailT "Div zero denominator"
similar to mod
>>>
pl @(Mod (Fst Id) (Snd Id)) (10,3)
Present 1 PresentT 1
>>>
pl @(Mod (Fst Id) (Snd Id)) (10,0)
Error Mod zero denominator FailT "Mod zero denominator"
similar to divMod
>>>
pl @(DivMod (Fst Id) (Snd Id)) (10,3)
Present (3,1) PresentT (3,1)
>>>
pl @(DivMod (Fst Id) (Snd Id)) (10,-3)
Present (-4,-2) PresentT (-4,-2)
>>>
pl @(DivMod (Fst Id) (Snd Id)) (-10,3)
Present (-4,2) PresentT (-4,2)
>>>
pl @(DivMod (Fst Id) (Snd Id)) (-10,-3)
Present (3,-1) PresentT (3,-1)
>>>
pl @(DivMod (Fst Id) (Snd Id)) (10,0)
Error DivMod zero denominator FailT "DivMod zero denominator"
similar to quotRem
>>>
pl @(QuotRem (Fst Id) (Snd Id)) (10,3)
Present (3,1) PresentT (3,1)
>>>
pl @(QuotRem (Fst Id) (Snd Id)) (10,-3)
Present (-3,1) PresentT (-3,1)
>>>
pl @(QuotRem (Fst Id) (Snd Id)) (-10,-3)
Present (3,-1) PresentT (3,-1)
>>>
pl @(QuotRem (Fst Id) (Snd Id)) (-10,3)
Present (-3,-1) PresentT (-3,-1)
>>>
pl @(QuotRem (Fst Id) (Snd Id)) (10,0)
Error QuotRem zero denominator FailT "QuotRem zero denominator"
proxy methods
converts a value to a Proxy
: the same as '\'Proxy'
>>>
pl @MkProxy 'x'
Present Proxy PresentT Proxy
read / show methods
similar to show
>>>
pl @(ShowP Id) [4,8,3,9]
Present "[4,8,3,9]" PresentT "[4,8,3,9]"
>>>
pl @(ShowP Id) 'x'
Present "'x'" PresentT "'x'"
>>>
pl @(ShowP (42 %- 10)) 'x'
Present "(-21) % 5" PresentT "(-21) % 5"
uses the Read
of the given type 't' and 'p' which points to the content to read
>>>
pl @(ReadP Rational) "4 % 5"
Present 4 % 5 PresentT (4 % 5)
>>>
pl @(ReadP' Day Id >> Between (ReadP' Day "2017-04-11") (ReadP' Day "2018-12-30")) "2018-10-12"
True TrueT
>>>
pl @(ReadP' Day Id >> Between (ReadP' Day "2017-04-11") (ReadP' Day "2018-12-30")) "2016-10-12"
False FalseT
data ReadBase' t (n :: Nat) p Source #
Read a number using base 2 through a maximum of 36
>>>
pl @(ReadBase Int 16) "00feD"
Present 4077 PresentT 4077
>>>
pl @(ReadBase Int 16) "-ff"
Present -255 PresentT (-255)
>>>
pl @(ReadBase Int 2) "10010011"
Present 147 PresentT 147
>>>
pl @(ReadBase Int 8) "Abff"
Error invalid base 8 FailT "invalid base 8"
supports negative numbers unlike readInt
data ShowBase' (n :: Nat) p Source #
Display a number at base 2 to 36, similar to showIntAtBase
but supports signed numbers
>>>
pl @(ShowBase 16) 4077
Present "fed" PresentT "fed"
>>>
pl @(ShowBase 16) (-255)
Present "-ff" PresentT "-ff"
>>>
pl @(ShowBase 2) 147
Present "10010011" PresentT "10010011"
>>>
pl @(ShowBase' 2 (Negate 147)) "whatever"
Present "-10010011" PresentT "-10010011"
arrow methods
data (p :: k) *** (q :: k1) infixr 3 Source #
similar to ***
>>>
pl @(Pred Id *** ShowP Id) (13, True)
Present (12,"True") PresentT (12,"True")
data (p :: k) ||| (q :: k1) infixr 2 Source #
similar |||
>>>
pl @(Pred Id ||| Id) (Left 13)
Present 12 PresentT 12
>>>
pl @(ShowP Id ||| Id) (Right "hello")
Present "hello" PresentT "hello"
data (p :: k) +++ (q :: k1) infixr 2 Source #
similar +++
>>>
pl @(Pred Id +++ Id) (Left 13)
Present Left 12 PresentT (Left 12)
>>>
pl @(ShowP Id +++ Reverse) (Right "hello")
Present Right "olleh" PresentT (Right "olleh")
compare methods
type OrdA' p q = OrdP (Fst Id >> p) (Snd Id >> q) Source #
similar to compare
>>>
pl @(Fst Id ==! Snd Id) (10,9)
Present GT PresentT GT
>>>
pl @(14 % 3 ==! Fst Id %- Snd Id) (-10,7)
Present GT PresentT GT
>>>
pl @(Fst Id ==! Snd Id) (10,11)
Present LT PresentT LT
>>>
pl @(Snd Id ==! (Fst Id >> Snd Id >> Head' Id)) (('x',[10,12,13]),10)
Present EQ PresentT EQ
>>>
pl @(Snd Id ==! Head' (Snd (Fst Id))) (('x',[10,12,13]),10)
Present EQ PresentT EQ
compare two strings ignoring case
>>>
pl @(Fst Id ===~ Snd Id) ("abC","aBc")
Present EQ PresentT EQ
>>>
pl @(Fst Id ===~ Snd Id) ("abC","DaBc")
Present LT PresentT LT
data Cmp (o :: OrderingP) p q Source #
compare two values using the given ordering 'o'
data CmpI (o :: OrderingP) p q Source #
compare two strings ignoring case using the given ordering 'o'
enum methods
unbounded succ
function
>>>
pl @(Succ Id) 13
Present 14 PresentT 14
>>>
pl @(Succ Id) LT
Present EQ PresentT EQ
>>>
pl @(Succ Id) GT
Error Succ IO e=Prelude.Enum.Ordering.succ: bad argument FailT "Succ IO e=Prelude.Enum.Ordering.succ: bad argument"
unbounded pred
function
>>>
pl @(Pred Id) 13
Present 12 PresentT 12
>>>
pl @(Pred Id) LT
Error Pred IO e=Prelude.Enum.Ordering.pred: bad argument FailT "Pred IO e=Prelude.Enum.Ordering.pred: bad argument"
fromEnum
function
>>>
pl @(FromEnum Id) 'x'
Present 120 PresentT 120
unsafe toEnum
function
>>>
pl @(ToEnum Char Id) 120
Present 'x' PresentT 'x'
data EnumFromTo p q Source #
similar to enumFromTo
>>>
pl @(EnumFromTo 2 5) ()
Present [2,3,4,5] PresentT [2,3,4,5]
>>>
pl @(EnumFromTo 'LT 'GT) ()
Present [LT,EQ,GT] PresentT [LT,EQ,GT]
>>>
pl @(EnumFromTo 'GT 'LT) ()
Present [] PresentT []
>>>
pl @(EnumFromTo (Pred Id) (Succ Id)) (SG.Max 10)
Present [Max {getMax = 9},Max {getMax = 10},Max {getMax = 11}] PresentT [Max {getMax = 9},Max {getMax = 10},Max {getMax = 11}]
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 # | |
Defined in Predicate.Prelude type PP (EnumFromTo p q) x :: Type Source # 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 # | |
Defined in Predicate.Prelude |
bounded succ
function
>>>
pl @(SuccB' Id) (13 :: Int)
Present 14 PresentT 14
>>>
pl @(SuccB' Id) LT
Present EQ PresentT EQ
>>>
pl @(SuccB 'LT Id) GT
Present LT PresentT LT
>>>
pl @(SuccB' Id) GT
Error Succ bounded failed FailT "Succ bounded failed"
bounded pred
function
>>>
pl @(PredB' Id) (13 :: Int)
Present 12 PresentT 12
>>>
pl @(PredB' Id) LT
Error Pred bounded failed FailT "Pred bounded failed"
bounded toEnum
function
>>>
pl @(ToEnumB Ordering LT) 2
Present GT PresentT GT
>>>
pl @(ToEnumB Ordering LT) 6
Present LT PresentT LT
>>>
pl @(ToEnumBF Ordering) 6
Error ToEnum bounded failed FailT "ToEnum bounded failed"
wrap / unwrap methods
unwraps a value (see Wrapped
)
>>>
pl @(Unwrap Id) (SG.Sum (-13))
Present -13 PresentT (-13)
wraps a value (see Wrapped
and Wrapped
)
>>>
:m + Data.List.NonEmpty
>>>
pl @(Wrap (SG.Sum _) Id) (-13)
Present Sum {getSum = -13} PresentT (Sum {getSum = -13})
>>>
pl @(Wrap SG.Any (Ge 4)) 13
Present Any {getAny = True} PresentT (Any {getAny = True})
>>>
pl @(Wrap (NonEmpty _) (Uncons >> 'Just Id)) "abcd"
Present 'a' :| "bcd" PresentT ('a' :| "bcd")
similar to coerce
>>>
pl @(Coerce (SG.Sum Integer)) (Identity (-13))
Present Sum {getSum = -13} PresentT (Sum {getSum = -13})
data Coerce2 (t :: k) Source #
see Coerce
: coerce over a functor
>>>
pl @(Coerce2 (SG.Sum Integer)) [Identity (-13), Identity 4, Identity 99]
Present [Sum {getSum = -13},Sum {getSum = 4},Sum {getSum = 99}] PresentT [Sum {getSum = -13},Sum {getSum = 4},Sum {getSum = 99}]
>>>
pl @(Coerce2 (SG.Sum Integer)) (Just (Identity (-13)))
Present Just (Sum {getSum = -13}) PresentT (Just (Sum {getSum = -13}))
>>>
pl @(Coerce2 (SG.Sum Int)) (Nothing @(Identity Int))
Present Nothing PresentT Nothing
list / foldable methods
similar to map
>>>
pl @(Map (Pred Id) Id) [1..5]
Present [0,1,2,3,4] PresentT [0,1,2,3,4]
similar to concat
>>>
pl @(Concat Id) ["abc","D","eF","","G"]
Present "abcDeFG" PresentT "abcDeFG"
>>>
pl @(Concat (Snd Id)) ('x',["abc","D","eF","","G"])
Present "abcDeFG" PresentT "abcDeFG"
similar to partition
>>>
pl @(Partition (Ge 3) Id) [10,4,1,7,3,1,3,5]
Present ([10,4,7,3,3,5],[1,1]) PresentT ([10,4,7,3,3,5],[1,1])
>>>
pl @(Partition (Prime Id) Id) [10,4,1,7,3,1,3,5]
Present ([7,3,3,5],[10,4,1,1]) PresentT ([7,3,3,5],[10,4,1,1])
>>>
pl @(Partition (Ge 300) Id) [10,4,1,7,3,1,3,5]
Present ([],[10,4,1,7,3,1,3,5]) PresentT ([],[10,4,1,7,3,1,3,5])
>>>
pl @(Partition (Id < 300) Id) [10,4,1,7,3,1,3,5]
Present ([10,4,1,7,3,1,3,5],[]) PresentT ([10,4,1,7,3,1,3,5],[])
similar to break
>>>
pl @(Break (Ge 3) Id) [10,4,1,7,3,1,3,5]
Present ([],[10,4,1,7,3,1,3,5]) PresentT ([],[10,4,1,7,3,1,3,5])
>>>
pl @(Break (Lt 3) Id) [10,4,1,7,3,1,3,5]
Present ([10,4],[1,7,3,1,3,5]) PresentT ([10,4],[1,7,3,1,3,5])
data Intercalate p q Source #
intercalate two lists
>>>
pl @(Intercalate '["aB"] '["xxxx","yz","z","www","xyz"]) ()
Present ["xxxx","aB","yz","aB","z","aB","www","aB","xyz"] PresentT ["xxxx","aB","yz","aB","z","aB","www","aB","xyz"]
>>>
pl @(Intercalate '[W 99,Negate 98] Id) [1..5]
Present [1,99,-98,2,99,-98,3,99,-98,4,99,-98,5] PresentT [1,99,-98,2,99,-98,3,99,-98,4,99,-98,5]
>>>
pl @(Intercalate '[99,100] Id) [1..5]
Present [1,99,100,2,99,100,3,99,100,4,99,100,5] PresentT [1,99,100,2,99,100,3,99,100,4,99,100,5]
Instances
(PP p x ~ [a], PP q x ~ PP p x, P p x, P q x, Show a) => P (Intercalate p q :: Type) x Source # | |
Defined in Predicate.Prelude type PP (Intercalate p q) x :: Type Source # eval :: MonadEval m => Proxy (Intercalate p q) -> POpts -> x -> m (TT (PP (Intercalate p q) x)) Source # | |
type PP (Intercalate p q :: Type) x Source # | |
Defined in Predicate.Prelude |
elem
function
>>>
pl @(Elem (Fst Id) (Snd Id)) ('x',"abcdxy")
True TrueT
>>>
pl @(Elem (Fst Id) (Snd Id)) ('z',"abcdxy")
False FalseT
similar to inits
>>>
pl @Inits [4,8,3,9]
Present [[],[4],[4,8],[4,8,3],[4,8,3,9]] PresentT [[],[4],[4,8],[4,8,3],[4,8,3,9]]
>>>
pl @Inits []
Present [[]] PresentT [[]]
similar to tails
>>>
pl @Tails [4,8,3,9]
Present [[4,8,3,9],[8,3,9],[3,9],[9],[]] PresentT [[4,8,3,9],[8,3,9],[3,9],[9],[]]
>>>
pl @Tails []
Present [[]] PresentT [[]]
split a list into single values
>>>
pl @(Ones Id) [4,8,3,9]
Present [[4],[8],[3],[9]] PresentT [[4],[8],[3],[9]]
>>>
pl @(Ones Id) []
Present [] PresentT []
type OneP = Guard (Printf "expected list of length 1 but found length=%d" Len) (Len == 1) >> Head Source #
similar to length
>>>
pl @Len [10,4,5,12,3,4]
Present 6 PresentT 6
>>>
pl @Len []
Present 0 PresentT 0
similar to length
for Foldable
instances
>>>
pl @(Length Id) (Left "aa")
Present 0 PresentT 0
>>>
pl @(Length Id) (Right "aa")
Present 1 PresentT 1
>>>
pl @(Length (Right' Id)) (Right "abcd")
Present 4 PresentT 4
>>>
pl @(Length (Thd (Snd Id))) (True,(23,'x',[10,9,1,3,4,2]))
Present 6 PresentT 6
split a list 'p' into parts using the lengths in the type level list 'ns'
>>>
pl @(SplitAts '[2,3,1,1] Id) "hello world"
Present ["he","llo"," ","w","orld"] PresentT ["he","llo"," ","w","orld"]
>>>
pl @(SplitAts '[2] Id) "hello world"
Present ["he","llo world"] PresentT ["he","llo world"]
>>>
pl @(SplitAts '[10,1,1,5] Id) "hello world"
Present ["hello worl","d","",""] PresentT ["hello worl","d","",""]
similar to splitAt
>>>
pl @(SplitAt 4 Id) "hello world"
Present ("hell","o world") PresentT ("hell","o world")
>>>
pl @(SplitAt 20 Id) "hello world"
Present ("hello world","") PresentT ("hello world","")
>>>
pl @(SplitAt 0 Id) "hello world"
Present ("","hello world") PresentT ("","hello world")
>>>
pl @(SplitAt (Snd Id) (Fst Id)) ("hello world",4)
Present ("hell","o world") PresentT ("hell","o world")
similar to minimum
>>>
pl @Min [10,4,5,12,3,4]
Present 3 PresentT 3
>>>
pl @Min []
Error empty list FailT "empty list"
similar to maximum
>>>
pl @Max [10,4,5,12,3,4]
Present 12 PresentT 12
>>>
pl @Max []
Error empty list FailT "empty list"
similar to sum
>>>
pl @Sum [10,4,5,12,3,4]
Present 38 PresentT 38
>>>
pl @Sum []
Present 0 PresentT 0
similar to null
using AsEmpty
>>>
pl @IsEmpty [1,2,3,4]
False FalseT
>>>
pl @IsEmpty []
True TrueT
>>>
pl @IsEmpty LT
False FalseT
>>>
pl @IsEmpty EQ
True TrueT
similar to toList
>>>
pl @ToList ("aBc" :: String)
Present "aBc" PresentT "aBc"
>>>
pl @ToList (Just 14)
Present [14] PresentT [14]
>>>
pl @ToList Nothing
Present [] PresentT []
>>>
pl @ToList (Left "xx")
Present [] PresentT []
>>>
pl @ToList (These 12 "xx")
Present ["xx"] PresentT ["xx"]
similar to toList
>>>
pl @(ToList' Id) ("aBc" :: String)
Present "aBc" PresentT "aBc"
>>>
pl @(ToList' Id) (Just 14)
Present [14] PresentT [14]
>>>
pl @(ToList' Id) Nothing
Present [] PresentT []
>>>
pl @(ToList' Id) (Left "xx")
Present [] PresentT []
>>>
pl @(ToList' Id) (These 12 "xx")
Present ["xx"] PresentT ["xx"]
similar to itoList
>>>
pl @(IToList _) ("aBc" :: String)
Present [(0,'a'),(1,'B'),(2,'c')] PresentT [(0,'a'),(1,'B'),(2,'c')]
invokes toList
>>>
pl @ToListExt (M.fromList [(1,'x'),(4,'y')])
Present [(1,'x'),(4,'y')] PresentT [(1,'x'),(4,'y')]
>>>
pl @ToListExt (T.pack "abc")
Present "abc" PresentT "abc"
data FromListExt (t :: Type) Source #
invokes fromList
requires the OverloadedLists extension
>>>
:set -XOverloadedLists
>>>
pl @(FromListExt (M.Map _ _)) [(4,"x"),(5,"dd")]
Present fromList [(4,"x"),(5,"dd")] PresentT (fromList [(4,"x"),(5,"dd")])
Instances
(Show l, IsList l, l ~ l') => P (FromListExt l' :: Type) l Source # | |
Defined in Predicate.Prelude type PP (FromListExt l') l :: Type Source # eval :: MonadEval m => Proxy (FromListExt l') -> POpts -> l -> m (TT (PP (FromListExt l') l)) Source # | |
type PP (FromListExt l' :: Type) l Source # | |
Defined in Predicate.Prelude |
data EmptyList' t Source #
creates an empty list of the given type
>>>
pl @(Id :+ EmptyList _) 99
Present [99] PresentT [99]
Instances
P (EmptyList' t :: Type) x Source # | |
Defined in Predicate.Prelude type PP (EmptyList' t) x :: Type Source # eval :: MonadEval m => Proxy (EmptyList' t) -> POpts -> x -> m (TT (PP (EmptyList' t) x)) Source # | |
type PP (EmptyList' t :: Type) x Source # | |
Defined in Predicate.Prelude |
type Singleton p = p :+ EmptyT [] p Source #
creates a singleton from a value
>>>
pl @(Singleton (Char1 "aBc")) ()
Present "a" PresentT "a"
>>>
pl @(Singleton Id) False
Present [False] PresentT [False]
>>>
pl @(Singleton (Snd Id)) (False,"hello")
Present ["hello"] PresentT ["hello"]
similar to reverse
>>>
pl @Reverse [1,2,4]
Present [4,2,1] PresentT [4,2,1]
>>>
pl @Reverse "AbcDeF"
Present "FeDcbA" PresentT "FeDcbA"
reverses using reversing
>>>
pl @ReverseL (T.pack "AbcDeF")
Present "FeDcbA" PresentT "FeDcbA"
>>>
pl @ReverseL ("AbcDeF" :: String)
Present "FeDcbA" PresentT "FeDcbA"
sort a list
>>>
pl @(SortOn (Fst Id) Id) [(10,"abc"), (3,"def"), (4,"gg"), (10,"xyz"), (1,"z")]
Present [(1,"z"),(3,"def"),(4,"gg"),(10,"abc"),(10,"xyz")] PresentT [(1,"z"),(3,"def"),(4,"gg"),(10,"abc"),(10,"xyz")]
>>>
pl @(SortBy (OrdP (Snd Id) (Fst Id)) Id) [(10,"ab"),(4,"x"),(20,"bbb")]
Present [(20,"bbb"),(10,"ab"),(4,"x")] PresentT [(20,"bbb"),(10,"ab"),(4,"x")]
>>>
pl @(SortBy 'LT Id) [1,5,2,4,7,0]
Present [1,5,2,4,7,0] PresentT [1,5,2,4,7,0]
>>>
pl @(SortBy 'GT Id) [1,5,2,4,7,0]
Present [0,7,4,2,5,1] PresentT [0,7,4,2,5,1]
>>>
pl @(SortBy ((Fst (Fst Id) ==! Fst (Snd Id)) <> (Snd (Fst Id) ==! Snd (Snd Id))) Id) [(10,"ab"),(4,"x"),(20,"bbb"),(4,"a"),(4,"y")]
Present [(4,"a"),(4,"x"),(4,"y"),(10,"ab"),(20,"bbb")] PresentT [(4,"a"),(4,"x"),(4,"y"),(10,"ab"),(20,"bbb")]
>>>
pl @(SortBy ((Fst (Fst Id) ==! Fst (Snd Id)) <> (Snd (Snd Id) ==! Snd (Fst Id))) Id) [(10,"ab"),(4,"x"),(20,"bbb"),(4,"a"),(4,"y")]
Present [(4,"y"),(4,"x"),(4,"a"),(10,"ab"),(20,"bbb")] PresentT [(4,"y"),(4,"x"),(4,"a"),(10,"ab"),(20,"bbb")]
type HeadDef p q = GDef (Uncons >> Fmap_1) p q Source #
takes the head or default of a list-like object
see ConsT
for other supported types eg Seq
>>>
pl @(HeadDef 444 Id) []
Present 444 PresentT 444
>>>
pl @(HeadDef 444 Id) [1..5]
Present 1 PresentT 1
>>>
pl @(HeadDef 444 Id) [1..5]
Present 1 PresentT 1
>>>
pl @(HeadDef (Char1 "w") Id) (Seq.fromList "abcdef")
Present 'a' PresentT 'a'
>>>
pl @(HeadDef (Char1 "w") Id) Seq.empty
Present 'w' PresentT 'w'
type HeadP q = GProxy (Uncons >> Fmap_1) q Source #
takes the head of a list or defaults to the monoid instance
see ConsT
for other supported types eg Seq
>>>
pl @(HeadP '[ "abc","def","asdfadf" ]) ()
Present "abc" PresentT "abc"
>>>
pl @(HeadP (Snd Id)) (123,[ "abc","def","asdfadf" ])
Present "abc" PresentT "abc"
>>>
pl @(HeadP (Snd Id)) (123,[])
Present () PresentT ()
maybe methods
data MkNothing' t Source #
Instances
P (MkNothing' t :: Type) a Source # | |
Defined in Predicate.Prelude type PP (MkNothing' t) a :: Type Source # eval :: MonadEval m => Proxy (MkNothing' t) -> POpts -> a -> m (TT (PP (MkNothing' t) a)) Source # | |
type PP (MkNothing' t :: Type) a Source # | |
Defined in Predicate.Prelude |
Just
constructor
>>>
pl @(MkJust Id) 44
Present Just 44 PresentT (Just 44)
type MaybeX p q r = MaybeXP (Fst Id >> p) q r Source #
MaybeX combinator
>>>
pl @(MaybeX (Fst Id) (Fst (Fst Id) +: Snd Id) (Snd Id)) ([1..5],Just 99)
Present [1,2,3,4,5,99] PresentT [1,2,3,4,5,99]
>>>
pl @(MaybeX (Fst Id) (Fst (Fst Id) +: Snd Id) (Snd Id)) ([1..5],Nothing)
Present [1,2,3,4,5] PresentT [1,2,3,4,5]
similar to maybe
similar to MaybeX
but provides a Proxy to the result of 'q' and does not provide the surrounding context
>>>
pl @(MaybeIn "foundnothing" (ShowP (Pred Id))) (Just 20)
Present "19" PresentT "19"
>>>
pl @(MaybeIn "found nothing" (ShowP (Pred Id))) Nothing
Present "found nothing" PresentT "found nothing"
Convenient method to convert a value 'p' to a Maybe
based on a predicate '\b\'
if '\b\' then Just 'p' else Nothing
>>>
pl @(MaybeBool (Id > 4) Id) 24
Present Just 24 PresentT (Just 24)
>>>
pl @(MaybeBool (Id > 4) Id) (-5)
Present Nothing PresentT Nothing
type JustDef''' p q r = GDef_X I p q r Source #
either methods
data PartitionEithers Source #
similar to partitionEithers
>>>
pl @PartitionEithers [Left 'a',Right 2,Left 'c',Right 4,Right 99]
Present ("ac",[2,4,99]) PresentT ("ac",[2,4,99])
>>>
pl @PartitionEithers [Right 2,Right 4,Right 99]
Present ([],[2,4,99]) PresentT ([],[2,4,99])
>>>
pl @PartitionEithers [Left 'a',Left 'c']
Present ("ac",[]) PresentT ("ac",[])
>>>
pl @PartitionEithers ([] @(Either _ _))
Present ([],[]) PresentT ([],[])
Instances
(Show a, Show b) => P PartitionEithers [Either a b] Source # | |
Defined in Predicate.Prelude | |
type PP PartitionEithers [Either a b] Source # | |
Defined in Predicate.Prelude |
Left
constructor
>>>
pl @(MkLeft _ Id) 44
Present Left 44 PresentT (Left 44)
Right
constructor
>>>
pl @(MkRight _ Id) 44
Present Right 44 PresentT (Right 44)
data EitherBool b p q Source #
Convenient method to convert a 'p' or '\q' to a Either
based on a predicate '\b\'
if 'b' then Right 'p' else Left '\q\'
>>>
pl @(EitherBool (Fst Id > 4) (Snd Id >> Fst Id) (Snd Id >> Snd Id)) (24,(-1,999))
Present Right 999 PresentT (Right 999)
>>>
pl @(EitherBool (Fst Id > 4) (Fst (Snd Id)) (Snd (Snd Id))) (1,(-1,999))
Present Left (-1) PresentT (Left (-1))
Instances
(Show (PP p a), P p a, Show (PP q a), P q a, P b a, PP b a ~ Bool) => P (EitherBool b p q :: Type) a Source # | |
Defined in Predicate.Prelude type PP (EitherBool b p q) a :: Type Source # eval :: MonadEval m => Proxy (EitherBool b p q) -> POpts -> a -> m (TT (PP (EitherBool b p q) a)) Source # | |
type PP (EitherBool b p q :: Type) a Source # | |
Defined in Predicate.Prelude |
type MkRightAlt t p = Pure (Either t) p Source #
semigroup / monoid methods
similar to <>
>>>
pl @(Fst Id <> Snd Id) ("abc","def")
Present "abcdef" PresentT "abcdef"
>>>
pl @("abcd" <> "ef" <> Id) "ghi"
Present "abcdefghi" PresentT "abcdefghi"
>>>
pl @("abcd" <> "ef" <> Id) "ghi"
Present "abcdefghi" PresentT "abcdefghi"
>>>
pl @(Wrap (SG.Sum _) Id <> FromInteger _ 10) 13
Present Sum {getSum = 23} PresentT (Sum {getSum = 23})
>>>
pl @(Wrap (SG.Product _) Id <> FromInteger _ 10) 13
Present Product {getProduct = 130} PresentT (Product {getProduct = 130})
>>>
pl @('(FromInteger _ 10,"def") <> Id) (SG.Sum 12, "_XYZ")
Present (Sum {getSum = 22},"def_XYZ") PresentT (Sum {getSum = 22},"def_XYZ")
similar to mconcat
>>>
pl @(MConcat Id) [SG.Sum 44, SG.Sum 12, SG.Sum 3]
Present Sum {getSum = 59} PresentT (Sum {getSum = 59})
similar to stimes
>>>
pl @(STimes 4 Id) (SG.Sum 3)
Present Sum {getSum = 12} PresentT (Sum {getSum = 12})
>>>
pl @(STimes 4 Id) "ab"
Present "abababab" PresentT "abababab"
similar to mempty
>>>
pl @(MEmptyT (SG.Sum Int)) ()
Present Sum {getSum = 0} PresentT (Sum {getSum = 0})
no Monoid for Maybe a unless a is also a monoid but can use empty!
lift mempty over a Functor
>>>
pl @(MEmptyT2 (SG.Product Int)) [Identity (-13), Identity 4, Identity 99]
Present [Product {getProduct = 1},Product {getProduct = 1},Product {getProduct = 1}] PresentT [Product {getProduct = 1},Product {getProduct = 1},Product {getProduct = 1}]
indexing methods
data Ix (n :: Nat) def Source #
similar to !!
>>>
pl @(Ix 4 "not found") ["abc","D","eF","","G"]
Present "G" PresentT "G"
>>>
pl @(Ix 40 "not found") ["abc","D","eF","","G"]
Present "not found" PresentT "not found"
similar to !!
leveraging Ixed
>>>
import qualified Data.Map.Strict as M
>>>
pl @(Id !! 2) ["abc","D","eF","","G"]
Present "eF" PresentT "eF"
>>>
pl @(Id !! 20) ["abc","D","eF","","G"]
Error (!!) index not found FailT "(!!) index not found"
>>>
pl @(Id !! "eF") (M.fromList (flip zip [0..] ["abc","D","eF","","G"]))
Present 2 PresentT 2
Instances
(P q a, P p a, Show (PP p a), Ixed (PP p a), PP q a ~ Index (PP p a), Show (Index (PP p a)), Show (IxValue (PP p a)), P r (Proxy (IxValue (PP p a))), PP r (Proxy (IxValue (PP p a))) ~ IxValue (PP p a)) => P (IxL p q r :: Type) a Source # | |
type PP (IxL p q r :: Type) a Source # | |
Defined in Predicate.Prelude |
lookup
leveraging Ixed
>>>
pl @(Id !!! 2) ["abc","D","eF","","G"]
Present "eF" PresentT "eF"
>>>
pl @(Id !!! 20) ["abc","D","eF","","G"]
Error index not found FailT "index not found"
>>>
pl @(Id !!! "eF") (M.fromList (flip zip [0..] ["abc","D","eF","","G"]))
Present 2 PresentT 2
>>>
pl @(Lookup Id 2) ["abc","D","eF","","G"]
Present Just "eF" PresentT (Just "eF")
>>>
pl @(Lookup Id 20) ["abc","D","eF","","G"]
Present Nothing PresentT Nothing
type Lookup' (t :: Type) p q = (q &&& Lookup p q) >> If (Snd Id >> IsNothing) (ShowP (Fst Id) >> Fail (Hole t) (Printf "index(%s) not found" Id)) (Snd Id >> Just Id) Source #
type LookupDef x y p = LookupDef' x y p I Source #
type LookupDef' x y p q = GDef (Lookup x y) p q Source #
type LookupFail msg x y = LookupFail' msg x y I Source #
type LookupFail' msg x y q = GFail (Lookup x y) msg q Source #
similar to cons
>>>
pl @(Fst Id :+ Snd Id) (99,[1,2,3,4])
Present [99,1,2,3,4] PresentT [99,1,2,3,4]
>>>
pl @(Snd Id :+ Fst Id) ([],5)
Present [5] PresentT [5]
>>>
pl @(123 :+ EmptyList _) "somestuff"
Present [123] PresentT [123]
similar to snoc
>>>
pl @(Snd Id +: Fst Id) (99,[1,2,3,4])
Present [1,2,3,4,99] PresentT [1,2,3,4,99]
>>>
pl @(Fst Id +: Snd Id) ([],5)
Present [5] PresentT [5]
>>>
pl @(EmptyT [] Id +: 5) 5
Present [5] PresentT [5]
uncons
>>>
pl @Uncons [1,2,3,4]
Present Just (1,[2,3,4]) PresentT (Just (1,[2,3,4]))
>>>
pl @Uncons []
Present Nothing PresentT Nothing
>>>
pl @Uncons (Seq.fromList "abc")
Present Just ('a',fromList "bc") PresentT (Just ('a',fromList "bc"))
>>>
pl @Uncons ("xyz" :: T.Text)
Present Just ('x',"yz") PresentT (Just ('x',"yz"))
unsnoc
>>>
pl @Unsnoc [1,2,3,4]
Present Just ([1,2,3],4) PresentT (Just ([1,2,3],4))
>>>
pl @Unsnoc []
Present Nothing PresentT Nothing
>>>
pl @Unsnoc ("xyz" :: T.Text)
Present Just ("xy",'z') PresentT (Just ("xy",'z'))
these methods
data PartitionThese Source #
similar to partitionThese
. returns a 3-tuple with the results so use Fst
Snd
Thd
to extract
>>>
pl @PartitionThese [This 'a', That 2, This 'c', These 'z' 1, That 4, These 'a' 2, That 99]
Present ("ac",[2,4,99],[('z',1),('a',2)]) PresentT ("ac",[2,4,99],[('z',1),('a',2)])
Instances
(Show a, Show b) => P PartitionThese [These a b] Source # | |
Defined in Predicate.Prelude type PP PartitionThese [These a b] :: Type Source # eval :: MonadEval m => Proxy PartitionThese -> POpts -> [These a b] -> m (TT (PP PartitionThese [These a b])) Source # | |
type PP PartitionThese [These a b] Source # | |
Defined in Predicate.Prelude |
type Thiss = Fst PartitionThese Source #
type Thats = Snd PartitionThese Source #
type Theses = Thd PartitionThese Source #
This
constructor
>>>
pl @(MkThis _ Id) 44
Present This 44 PresentT (This 44)
That
constructor
>>>
pl @(MkThat _ Id) 44
Present That 44 PresentT (That 44)
These
constructor
>>>
pl @(MkThese (Fst Id) (Snd Id)) (44,'x')
Present These 44 'x' PresentT (These 44 'x')
similar to these
>>>
pl @(TheseIn Id Len (Fst Id + Length (Snd Id))) (This 13)
Present 13 PresentT 13
>>>
pl @(TheseIn Id Len (Fst Id + Length (Snd Id))) (That "this is a long string")
Present 21 PresentT 21
>>>
pl @(TheseIn Id Len (Fst Id + Length (Snd Id))) (These 20 "somedata")
Present 28 PresentT 28
>>>
pl @(TheseIn (MkLeftAlt _ Id) (MkRightAlt _ Id) (If (Fst Id > Length (Snd Id)) (MkLeft _ (Fst Id)) (MkRight _ (Snd Id)))) (That "this is a long string")
Present Right "this is a long string" PresentT (Right "this is a long string")
>>>
pl @(TheseIn (MkLeftAlt _ Id) (MkRightAlt _ Id) (If (Fst Id > Length (Snd Id)) (MkLeft _ (Fst Id)) (MkRight _ (Snd Id)))) (These 1 "this is a long string")
Present Right "this is a long string" PresentT (Right "this is a long string")
>>>
pl @(TheseIn (MkLeftAlt _ Id) (MkRightAlt _ Id) (If (Fst Id > Length (Snd Id)) (MkLeft _ (Fst Id)) (MkRight _ (Snd Id)))) (These 100 "this is a long string")
Present Left 100 PresentT (Left 100)
similar to mergeTheseWith
but additionally provides 'p', '\q' and 'r' the original input as the first element in the tuple
>>>
pl @(TheseX ((Fst (Fst Id) + Snd Id) >> ShowP Id) (ShowP Id) (Snd (Snd Id)) (Snd Id)) (9,This 123)
Present "132" PresentT "132"
>>>
pl @(TheseX '(Snd Id,"fromthis") '(Negate 99,Snd Id) (Snd Id) Id) (This 123)
Present (123,"fromthis") PresentT (123,"fromthis")
>>>
pl @(TheseX '(Snd Id,"fromthis") '(Negate 99,Snd Id) (Snd Id) Id) (That "fromthat")
Present (-99,"fromthat") PresentT (-99,"fromthat")
>>>
pl @(TheseX '(Snd Id,"fromthis") '(Negate 99,Snd Id) (Snd Id) Id) (These 123 "fromthese")
Present (123,"fromthese") PresentT (123,"fromthese")
fold / unfold methods
similar to scanl
>>>
pl @(Scanl (Snd Id :+ Fst Id) (Fst Id) (Snd Id)) ([99],[1..5])
Present [[99],[1,99],[2,1,99],[3,2,1,99],[4,3,2,1,99],[5,4,3,2,1,99]] PresentT [[99],[1,99],[2,1,99],[3,2,1,99],[4,3,2,1,99],[5,4,3,2,1,99]]
>>>
pl @(ScanN 4 Id (Succ Id)) 'c'
Present "cdefg" PresentT "cdefg"
>>>
pl @(FoldN 4 Id (Succ Id)) 'c'
Present 'g' PresentT 'g'
similar to unfoldr
>>>
pl @(Unfoldr (MaybeBool (Not Null) (SplitAt 2 Id)) Id) [1..5]
Present [[1,2],[3,4],[5]] PresentT [[1,2],[3,4],[5]]
>>>
pl @(IterateN 4 (Succ Id)) 4
Present [4,5,6,7] PresentT [4,5,6,7]
type IterateUntil p f = IterateWhile (Not p) f Source #
type IterateNWhile n p f = '(n, Id) >> (IterateWhile ((Fst Id > 0) && (Snd Id >> p)) (Pred Id *** f) >> Map (Snd Id) Id) Source #
type IterateNUntil n p f = IterateNWhile n (Not p) f Source #
failure methods
Fails the computation with a message
>>>
pl @(Failt Int (Printf "value=%03d" Id)) 99
Error value=099 FailT "value=099"
>>>
pl @(FailS (Printf2 "value=%03d string=%s")) (99,"somedata")
Error value=099 string=somedata FailT "value=099 string=somedata"
catch a failure
>>>
pl @(Catch (Succ Id) (Fst Id >> Second (ShowP Id) >> Printf2 "%s %s" >> 'LT)) GT
Present LT PresentT LT
>>>
pl @(Catch' (Succ Id) (Second (ShowP Id) >> Printf2 "%s %s")) GT
Error Succ IO e=Prelude.Enum.Ordering.succ: bad argument GT FailT "Succ IO e=Prelude.Enum.Ordering.succ: bad argument GT"
>>>
pl @(Catch' (Succ Id) (Second (ShowP Id) >> Printf2 "%s %s")) LT
Present EQ PresentT EQ
more flexible: takes a (String,x) and a proxy so we can still call 'False 'True now takes the FailT string and x so you can print more detail if you want need the proxy so we can fail without having to explicitly specify a type
zip methods
similar to align
thats pads with This
or That
if one list is shorter than the other
the key is that all information about both lists are preserved
>>>
pl @(ZipThese (Fst Id) (Snd Id)) ("aBc", [1..5])
Present [These 'a' 1,These 'B' 2,These 'c' 3,That 4,That 5] PresentT [These 'a' 1,These 'B' 2,These 'c' 3,That 4,That 5]
>>>
pl @(ZipThese (Fst Id) (Snd Id)) ("aBcDeF", [1..3])
Present [These 'a' 1,These 'B' 2,These 'c' 3,This 'D',This 'e',This 'F'] PresentT [These 'a' 1,These 'B' 2,These 'c' 3,This 'D',This 'e',This 'F']
>>>
pl @(ZipThese Id Reverse) "aBcDeF"
Present [These 'a' 'F',These 'B' 'e',These 'c' 'D',These 'D' 'c',These 'e' 'B',These 'F' 'a'] PresentT [These 'a' 'F',These 'B' 'e',These 'c' 'D',These 'D' 'c',These 'e' 'B',These 'F' 'a']
>>>
pl @(ZipThese Id '[]) "aBcDeF"
Present [This 'a',This 'B',This 'c',This 'D',This 'e',This 'F'] PresentT [This 'a',This 'B',This 'c',This 'D',This 'e',This 'F']
>>>
pl @(ZipThese '[] Id) "aBcDeF"
Present [That 'a',That 'B',That 'c',That 'D',That 'e',That 'F'] PresentT [That 'a',That 'B',That 'c',That 'D',That 'e',That 'F']
type Unzip = '(Map (Fst Id) Id, Map (Snd Id) Id) Source #
unzip
equivalent
>>>
pl @Unzip (zip [1..5] "abcd")
Present ([1,2,3,4],"abcd") PresentT ([1,2,3,4],"abcd")
conditional methods
if p then run q else run r
>>>
pl @(If (Gt 4) "greater than 4" "less than or equal to 4" ) 10
Present "greater than 4" PresentT "greater than 4"
>>>
pl @(If (Gt 4) "greater than 4" "less than or equal to 4") 0
Present "less than or equal to 4" PresentT "less than or equal to 4"
data Case (e :: k0) (ps :: [k]) (qs :: [k1]) (r :: k2) Source #
Instances
(FailIfT (NotT (LenT ps == LenT qs)) ((LenT ps == LenT qs) ~ True) (((Text "lengths are not the same " :<>: ShowType (LenT ps)) :<>: Text " vs ") :<>: ShowType (LenT qs)), P (CaseImpl (LenT ps) e ps qs r) x) => P (Case e ps qs r :: Type) x Source # | |
type PP (Case e ps qs r :: Type) x Source # | |
Defined in Predicate.Prelude |
type Case' (ps :: [k]) (qs :: [k1]) (r :: k2) = Case (Snd Id >> Failp "Case:no match") ps qs r Source #
type GuardsQuick (prt :: k) (os :: [k1]) = Guards (ToGuardsT prt os) Source #
type GuardsQuickLax (prt :: k) (os :: [k1]) = GuardsLax (ToGuardsT prt os) Source #
'p' is the predicate and on failure of the predicate runs 'prt'
>>>
pl @(Guard "expected > 3" (Gt 3)) 17
Present 17 PresentT 17
>>>
pl @(Guard "expected > 3" (Gt 3)) 1
Error expected > 3 FailT "expected > 3"
>>>
pl @(Guard (Printf "%d not > 3" Id) (Gt 3)) (-99)
Error -99 not > 3 FailT "-99 not > 3"
data GuardSimple p Source #
similar to Guard
but uses the root message of the False predicate case as the failure message
>>>
pl @(GuardSimple (Luhn Id)) [1..4]
Error Luhn map=[4,6,2,2] sum=14 ret=4 | [1,2,3,4] FailT "Luhn map=[4,6,2,2] sum=14 ret=4 | [1,2,3,4]"
>>>
pl @(GuardSimple (Luhn Id)) [1,2,3,0]
Present [1,2,3,0] PresentT [1,2,3,0]
>>>
pl @(GuardSimple (Len > 30)) [1,2,3,0]
Error 4 > 30 FailT "4 > 30"
Instances
(Show a, P p a, PP p a ~ Bool) => P (GuardSimple p :: Type) a Source # | |
Defined in Predicate.Prelude type PP (GuardSimple p) a :: Type Source # eval :: MonadEval m => Proxy (GuardSimple p) -> POpts -> a -> m (TT (PP (GuardSimple p) a)) Source # | |
type PP (GuardSimple p :: Type) a Source # | |
Defined in Predicate.Prelude |
type GuardsNLax prt (n :: Nat) p = GuardsNImpl False prt n p Source #
type GuardsDetail (prt :: Symbol) (os :: [(k0, k1)]) = GuardsImplXX True (ToGuardsDetailT prt os) Source #
parallel methods
data Repeat (n :: Nat) p Source #
creates a promoted list of predicates and then evaluates them into a list. see PP instance for '[k]
>>>
pl @(Repeat 4 (Succ Id)) 'c'
Present "dddd" PresentT "dddd"
>>>
pl @(Repeat 4 "abc") ()
Present ["abc","abc","abc","abc"] PresentT ["abc","abc","abc","abc"]
IO methods
similar to readFile
>>>
pl @(ReadFile ".ghci" >> 'Just Id >> Len >> Gt 0) ()
True TrueT
>>>
pl @(FileExists "xyzzy") ()
False FalseT
does the directory exists
>>>
pl @(DirExists ".") ()
True TrueT
does the directory exists
>>>
pl @(ReadEnv "PATH" >> 'Just Id >> 'True) ()
True TrueT
data ReadEnvAll Source #
Instances
P ReadEnvAll a Source # | |
Defined in Predicate.Prelude type PP ReadEnvAll a :: Type Source # eval :: MonadEval m => Proxy ReadEnvAll -> POpts -> a -> m (TT (PP ReadEnvAll a)) Source # | |
type PP ReadEnvAll a Source # | |
Defined in Predicate.Prelude |
type AppendFile (s :: Symbol) p = WriteFileImpl (FOther s WFAppend) p Source #
type WriteFile' (s :: Symbol) p = WriteFileImpl (FOther s WFWriteForce) p Source #
string methods
converts a string IsText
value to lower case
>>>
pl @ToLower "HeLlO wOrld!"
Present "hello world!" PresentT "hello world!"
converts a string IsText
value to upper case
>>>
pl @ToUpper "HeLlO wOrld!"
Present "HELLO WORLD!" PresentT "HELLO WORLD!"
data StripLR (right :: Bool) p q Source #
similar to stripLeft
stripRight
>>>
pl @(StripLeft "xyz" Id) ("xyzHello" :: String)
Present Just "Hello" PresentT (Just "Hello")
>>>
pl @(StripLeft "xyz" Id) (T.pack "xyzHello")
Present Just "Hello" PresentT (Just "Hello")
>>>
pl @(StripLeft "xyz" Id) "xywHello"
Present Nothing PresentT Nothing
>>>
pl @(StripRight "xyz" Id) "Hello xyz"
Present Just "Hello " PresentT (Just "Hello ")
>>>
pl @(StripRight "xyz" Id) "xyzHelloxyw"
Present Nothing PresentT Nothing
>>>
pl @(StripRight "xyz" Id) ""
Present Nothing PresentT Nothing
>>>
pl @(StripRight "xyz" "xyz") ()
Present Just "" PresentT (Just "")
type StripRight p q = StripLR True p q Source #
type FromStringP (t :: Type) p = FromStringP' (Hole t) p Source #
data FromStringP' t s Source #
fromString
function where you need to provide the type 't' of the result
>>>
pl @(FromStringP (Identity _) Id) "abc"
Present Identity "abc" PresentT (Identity "abc")
>>>
pl @(FromStringP (Seq.Seq _) Id) "abc"
Present fromList "abc" PresentT (fromList "abc")
Instances
(P s a, PP s a ~ String, Show (PP t a), IsString (PP t a)) => P (FromStringP' t s :: Type) a Source # | |
Defined in Predicate.Prelude type PP (FromStringP' t s) a :: Type Source # eval :: MonadEval m => Proxy (FromStringP' t s) -> POpts -> a -> m (TT (PP (FromStringP' t s) a)) Source # | |
type PP (FromStringP' t s :: Type) a Source # | |
Defined in Predicate.Prelude |
printf methods
uses Printf to format output
>>>
pl @(Printf "value=%03d" Id) 12
Present "value=012" PresentT "value=012"
>>>
pl @(Printf "%s" (Fst Id)) ("abc",'x')
Present "abc" PresentT "abc"
>>>
pl @(Printf "%d" (Fst Id)) ("abc",'x')
Error Printf (IO e=printf: bad formatting char 'd') FailT "Printf (IO e=printf: bad formatting char 'd')"
Printfn prints an inductive tuple
>>>
pl @(Printfn "%s %s" Id) ("123",("def",()))
Present "123 def" PresentT "123 def"
>>>
pl @(Printfn "s=%s d=%03d" Id) ("ab",(123,()))
Present "s=ab d=123" PresentT "s=ab d=123"
Instances
(KnownNat (TupleLenT as), PrintC bs, (b, bs) ~ ReverseTupleP (a, as), ReverseTupleC (a, as), Show a, Show as, PrintfArg b, PP s x ~ String, PP p x ~ (a, as), P s x, P p x, CheckT (PP p x) ~ True) => P (Printfn s p :: Type) x Source # | |
type PP (Printfn s p :: Type) x Source # | |
Defined in Predicate.Prelude |
type PrintfntLax (n :: Nat) s = Printfn s (TupleListLax n) Source #
type Printf2 s = Printfn s '(Fst Id, '(Snd Id, ())) Source #
print a 2-tuple
>>>
pl @(Printf2 "fst=%s snd=%03d") ("ab",123)
Present "fst=ab snd=123" PresentT "fst=ab snd=123"
type Printf3 s = Printfn s '(Fst Id, '(Snd Id, '(Thd Id, ()))) Source #
print a 3-tuple
>>>
pl @(Printf3 "fst=%s snd=%03d thd=%s") ("ab",123,"xx")
Present "fst=ab snd=123 thd=xx" PresentT "fst=ab snd=123 thd=xx"
higher order methods
data Pure (t :: Type -> Type) p Source #
similar to pure
>>>
pl @(Pure Maybe Id) 4
Present Just 4 PresentT (Just 4)
>>>
pl @(Pure [] Id) 4
Present [4] PresentT [4]
>>>
pl @(Pure (Either String) (Fst Id)) (13,True)
Present Right 13 PresentT (Right 13)
data Pure2 (t :: Type -> Type) Source #
lift pure over a Functor
>>>
pl @(Pure2 (Either String)) [1,2,4]
Present [Right 1,Right 2,Right 4] PresentT [Right 1,Right 2,Right 4]
type FoldMap (t :: Type) p = Map (Wrap t Id) p >> Unwrap (MConcat Id) Source #
similar to a limited form of foldMap
>>>
pl @(FoldMap (SG.Sum _) Id) [44, 12, 3]
Present 59 PresentT 59
>>>
pl @(FoldMap (SG.Product _) Id) [44, 12, 3]
Present 1584 PresentT 1584
similar to <$
>>>
pl @(Fst Id <$ Snd Id) ("abc",Just 20)
Present Just "abc" PresentT (Just "abc")
type (*>) p q = q <* p infixl 4 Source #
similar to <*
>>>
pl @(Fst Id <* Snd Id) (Just "abc",Just 20)
Present Just "abc" PresentT (Just "abc")
similar to fmap fst
>>>
pl @Fmap_1 (Just (13,"Asf"))
Present Just 13 PresentT (Just 13)
to make this work we grab the fst or snd out of the Maybe so it is a head or not/ is a tail or not etc! we still have access to the whole original list so we dont lose anything!
similar to fmap snd
>>>
pl @Fmap_2 (Just ("asf",13))
Present Just 13 PresentT (Just 13)
similar to sequenceA
>>>
pl @Sequence [Just 10, Just 20, Just 30]
Present Just [10,20,30] PresentT (Just [10,20,30])
>>>
pl @Sequence [Just 10, Just 20, Just 30, Nothing, Just 40]
Present Nothing PresentT Nothing
Instances
(Show (f (t a)), Show (t (f a)), Traversable t, Applicative f) => P Sequence (t (f a)) Source # | |
type PP Sequence (t (f a)) Source # | |
Defined in Predicate.Prelude |
similar to join
>>>
pl @Join (Just (Just 20))
Present Just 20 PresentT (Just 20)
>>>
pl @Join ["ab","cd","","ef"]
Present "abcdef" PresentT "abcdef"
data EmptyT (t :: Type -> Type) p Source #
similar to empty
>>>
pl @(EmptyT Maybe Id) ()
Present Nothing PresentT Nothing
>>>
pl @(EmptyT [] Id) ()
Present [] PresentT []
>>>
pl @(EmptyT [] (Char1 "x")) (13,True)
Present "" PresentT ""
>>>
pl @(EmptyT (Either String) (Fst Id)) (13,True)
Present Left "" PresentT (Left "")
data p <|> q infixl 3 Source #
similar to <|>
>>>
pl @(Fst Id <|> Snd Id) (Nothing,Just 20)
Present Just 20 PresentT (Just 20)
>>>
pl @(Fst Id <|> Snd Id) (Just 10,Just 20)
Present Just 10 PresentT (Just 10)
>>>
pl @(Fst Id <|> Snd Id) (Nothing,Nothing)
Present Nothing PresentT Nothing
similar to extract
>>>
pl @Extract (Nothing,Just 20)
Present Just 20 PresentT (Just 20)
>>>
pl @Extract (Identity 20)
Present 20 PresentT 20
similar to duplicate
>>>
pl @Duplicate (20,"abc")
Present (20,(20,"abc")) PresentT (20,(20,"abc"))
expression combinators
processes a type level list predicates running each in sequence: see >>
>>>
pl @(Do [Pred Id, ShowP Id, Id &&& Len]) 9876543
Present ("9876542",7) PresentT ("9876542",7)
>>>
pl @(Do '[W 123, W "xyz", Len &&& Id, Pred Id *** Id<>Id]) ()
Present (2,"xyzxyz") PresentT (2,"xyzxyz")
data (p :: k) >> (q :: k1) infixr 1 Source #
This is composition for predicates
>>>
pl @(Fst Id >> Succ (Id !! 0)) ([11,12],'x')
Present 12 PresentT 12
>>>
pl @(Len *** Succ Id >> ShowP (First (Pred Id))) ([11,12],'x')
Present "(1,'y')" PresentT "(1,'y')"
data DoN (n :: Nat) p Source #
leverages Do
for repeating predicates (passthrough method)
same as DoN n p == FoldN n p Id
but more efficient
>>>
pl @(DoN 4 (Succ Id)) 'c'
Present 'g' PresentT 'g'
>>>
pl @(DoN 4 (Id <> " | ")) "abc"
Present "abc | | | | " PresentT "abc | | | | "
>>>
pl @(DoN 4 (Id <> "|" <> Id)) "abc"
Present "abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc" PresentT "abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc|abc"
miscellaneous
a predicate on prime numbers
>>>
pl @(Prime Id) 2
True TrueT
>>>
pl @(Map '(Id,Prime Id) Id) [0..12]
Present [(0,False),(1,False),(2,True),(3,True),(4,False),(5,True),(6,False),(7,True),(8,False),(9,False),(10,False),(11,True),(12,False)] PresentT [(0,False),(1,False),(2,True),(3,True),(4,False),(5,True),(6,False),(7,True),(8,False),(9,False),(10,False),(11,True),(12,False)]
Luhn predicate check on last digit
>>>
pl @(Luhn Id) [1,2,3,0]
True TrueT
>>>
pl @(Luhn Id) [1,2,3,4]
False FalseT
>>>
pl @(GuardSimple (Luhn Id)) [15,4,3,1,99]
Error Luhn map=[90,2,3,8,6] sum=109 ret=9 | [15,4,3,1,99] FailT "Luhn map=[90,2,3,8,6] sum=109 ret=9 | [15,4,3,1,99]"
data Char1 (s :: Symbol) Source #
extracts the first character from a non empty Symbol
>>>
pl @(Char1 "aBc") ()
Present 'a' PresentT 'a'