Safe Haskell | None |
---|---|
Language | Haskell2010 |
promoted foldable functions
Documentation
similar to concat
>>>
pz @Concat ["abc","D","eF","","G"]
Val "abcDeFG"
>>>
pz @(Lift Concat Snd) ('x',["abc","D","eF","","G"])
Val "abcDeFG"
similar to concatMap
similar to cycle
but for a fixed number n
>>>
pz @(Cycle 5 Id) [1,2]
Val [1,2,1,2,1]
data FoldMap (t :: Type) p Source #
wraps each item in the foldable container and then unwraps the mconcatenated result: uses Wrapped
>>>
pz @(FoldMap (SG.Sum _) Id) [44, 12, 3]
Val 59
>>>
pz @(FoldMap (SG.Product _) Id) [44, 12, 3]
Val 1584
>>>
type Ands' p = FoldMap SG.All p
>>>
pz @(Ands' Id) [True,False,True,True]
Val False
>>>
pz @(Ands' Id) [True,True,True]
Val True
>>>
pz @(Ands' Id) []
Val True
>>>
type Ors' p = FoldMap SG.Any p
>>>
pz @(Ors' Id) [False,False,False]
Val False
>>>
pz @(Ors' Id) []
Val False
>>>
pz @(Ors' Id) [False,False,False,True]
Val True
>>>
type AllPositive' = FoldMap SG.All (Map Positive)
>>>
pz @AllPositive' [3,1,-5,10,2,3]
Val False
>>>
type AllNegative' = FoldMap SG.All (Map Negative)
>>>
pz @AllNegative' [-1,-5,-10,-2,-3]
Val True
>>>
:set -XKindSignatures
>>>
type Max' (t :: Type) = FoldMap (SG.Max t) Id -- requires t be Bounded for monoid instance
>>>
pz @(Max' Int) [10,4,5,12,3,4]
Val 12
>>>
pl @(FoldMap (SG.Sum _) Id) [14,8,17,13]
Present 52 ((>>) 52 | {getSum = 52}) Val 52
>>>
pl @(FoldMap (SG.Max _) Id) [14 :: Int,8,17,13] -- allowed as the values are Bounded!
Present 17 ((>>) 17 | {getMax = 17}) Val 17
>>>
pl @((Len >> (Elem Id '[4,7,1] || (Mod Id 3 >> Same 0))) || (FoldMap (SG.Sum _) Id >> Gt 200)) [1..20]
True (False || True) Val True
>>>
pl @((Len >> (Elem Id '[4,7,1] || (Mod Id 3 >> Same 0))) || (FoldMap (SG.Sum _) Id >> Gt 200)) [1..19]
False (False || False | ((>>) False | {1 == 0}) || ((>>) False | {190 > 200})) Val False
>>>
pl @((Len >> (Elem Id '[4,7,1] || (Mod Id 3 >> Same 0))) || (FoldMap (SG.Sum _) Id >> Gt 200)) []
True (True || False) Val True
>>>
pl @((Len >> (Elem Id '[4,7,1] || (Mod Id 3 >> Same 0))) &&& FoldMap (SG.Sum _) Id) [1..20]
Present (False,210) ('(False,210)) Val (False,210)
>>>
pl @(FoldMap SG.Any Id) [False,False,True,False]
Present True ((>>) True | {getAny = True}) Val True
>>>
pl @(FoldMap SG.All Id) [False,False,True,False]
Present False ((>>) False | {getAll = False}) Val False
>>>
pl @(FoldMap (SG.Sum _) Id) (Just 13)
Present 13 ((>>) 13 | {getSum = 13}) Val 13
>>>
pl @(FoldMap (SG.Sum _) Id) [1..10]
Present 55 ((>>) 55 | {getSum = 55}) Val 55
invokes toList
>>>
pz @ToListExt (M.fromList [(1,'x'),(4,'y')])
Val [(1,'x'),(4,'y')]
>>>
pz @ToListExt (T.pack "abc")
Val "abc"
data FromList (t :: Type) Source #
invokes fromList
>>>
run @('OMsg "Fred" ':# 'OLite ':# 'OColorOff) @(FromList (Set.Set Int) << '[2,1,5,5,2,5,2]) ()
Fred >>> Present fromList [1,2,5] ((>>) fromList [1,2,5] | {FromList fromList [1,2,5]}) Val (fromList [1,2,5])
>>>
pl @(FromList (M.Map _ _) >> Id !! C "y") [('x',True),('y',False)]
Present False ((>>) False | {IxL('y') False | p=fromList [('x',True),('y',False)] | q='y'}) Val False
>>>
pl @(FromList (M.Map _ _) >> Id !! C "z") [('x',True),('y',False)]
Error (!!) index not found (IxL('z') | fromList [('x',True),('y',False)]) Fail "(!!) index not found"
>>>
pl @(FromList (M.Map _ _)) [(4,"x"),(5,"dd")]
Present fromList [(4,"x"),(5,"dd")] (FromList fromList [(4,"x"),(5,"dd")]) Val (fromList [(4,"x"),(5,"dd")])
data FromListExt (t :: Type) Source #
invokes fromList
requires the OverloadedLists extension
>>>
:set -XOverloadedLists
>>>
pz @(FromListExt (M.Map _ _)) [(4,"x"),(5,"dd")]
Val (fromList [(4,"x"),(5,"dd")])
Instances
Show (FromListExt t) Source # | |
Defined in Predicate.Data.Foldable showsPrec :: Int -> FromListExt t -> ShowS # show :: FromListExt t -> String # showList :: [FromListExt t] -> ShowS # | |
(Show l, IsList l, l ~ l') => P (FromListExt l' :: Type) l Source # | |
Defined in Predicate.Data.Foldable type PP (FromListExt l') l 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.Data.Foldable |
similar to toList
>>>
pz @ToList "aBc"
Val "aBc"
>>>
pz @ToList (Just 14)
Val [14]
>>>
pz @ToList Nothing
Val []
>>>
pz @ToList (Left "xx")
Val []
>>>
pz @ToList (These 12 "xx")
Val ["xx"]
>>>
pl @ToList (M.fromList $ zip [0..] "abcd")
Present "abcd" (ToList fromList [(0,'a'),(1,'b'),(2,'c'),(3,'d')]) Val "abcd"
>>>
pl @ToList (Just 123)
Present [123] (ToList Just 123) Val [123]
>>>
pl @ToList (M.fromList (zip ['a'..] [9,2,7,4]))
Present [9,2,7,4] (ToList fromList [('a',9),('b',2),('c',7),('d',4)]) Val [9,2,7,4]
data IToList (t :: Type) Source #
similar to itoList
>>>
pz @(IToList _) ("aBc" :: String)
Val [(0,'a'),(1,'B'),(2,'c')]
>>>
pl @(IToList _) ("abcd" :: String)
Present [(0,'a'),(1,'b'),(2,'c'),(3,'d')] (IToList(Int) [(0,'a'),(1,'b'),(2,'c'),(3,'d')] | "abcd") Val [(0,'a'),(1,'b'),(2,'c'),(3,'d')]
>>>
pl @(IToList _) (M.fromList $ itoList ("abcd" :: String))
Present [(0,'a'),(1,'b'),(2,'c'),(3,'d')] (IToList(Int) [(0,'a'),(1,'b'),(2,'c'),(3,'d')] | fromList [(0,'a'),(1,'b'),(2,'c'),(3,'d')]) Val [(0,'a'),(1,'b'),(2,'c'),(3,'d')]
>>>
pl @(IToList _) [9,2,7,4]
Present [(0,9),(1,2),(2,7),(3,4)] (IToList(Int) [(0,9),(1,2),(2,7),(3,4)] | [9,2,7,4]) Val [(0,9),(1,2),(2,7),(3,4)]
>>>
pl @(IToList _) (M.fromList (zip ['a'..] [9,2,7,4]))
Present [('a',9),('b',2),('c',7),('d',4)] (IToList(Char) [('a',9),('b',2),('c',7),('d',4)] | fromList [('a',9),('b',2),('c',7),('d',4)]) Val [('a',9),('b',2),('c',7),('d',4)]
>>>
pl @(IToList _) (Just 234)
Present [((),234)] (IToList(()) [((),234)] | Just 234) Val [((),234)]
>>>
pl @(IToList _) (Nothing @Double)
Present [] (IToList(()) [] | Nothing) Val []
>>>
pl @(IToList _) [1..5]
Present [(0,1),(1,2),(2,3),(3,4),(4,5)] (IToList(Int) [(0,1),(1,2),(2,3),(3,4),(4,5)] | [1,2,3,4,5]) Val [(0,1),(1,2),(2,3),(3,4),(4,5)]
>>>
pl @(IToList _) ['a','b','c']
Present [(0,'a'),(1,'b'),(2,'c')] (IToList(Int) [(0,'a'),(1,'b'),(2,'c')] | "abc") Val [(0,'a'),(1,'b'),(2,'c')]
create a NonEmpty
list from a Foldable
>>>
pz @ToNEList []
Fail "empty list"
>>>
pz @ToNEList [1,2,3,4,5]
Val (1 :| [2,3,4,5])
similar to null
using Foldable
>>>
pz @Null [1,2,3,4]
Val False
>>>
pz @Null []
Val True
>>>
pz @Null Nothing
Val True
>>>
pz @IsEmpty [1,2,3,4]
Val False
>>>
pz @IsEmpty []
Val True
>>>
pz @IsEmpty LT
Val False
>>>
pz @IsEmpty EQ
Val True
>>>
pl @IsEmpty ("failed11" :: T.Text)
False (IsEmpty | "failed11") Val False
>>>
pl @IsEmpty ("" :: T.Text)
True (IsEmpty | "") Val True
similar to and
>>>
pz @Ands [True,True,True]
Val True
>>>
pl @Ands [True,True,True,False]
False (Ands(4) i=3 | [True,True,True,False]) Val False
>>>
pz @Ands []
Val True
similar to or
>>>
pz @Ors [False,False,False]
Val False
>>>
pl @Ors [True,True,True,False]
True (Ors(4) i=0 | [True,True,True,False]) Val True
>>>
pl @Ors []
False (Ors(0) | []) Val False