context, code re: catflame status
-- | Filter a list with a predicate that produces an effect.
--
-- >>> filtering (ExactlyOne . even) (4 :. 5 :. 6 :. Nil)
-- ExactlyOne [4,6]
--
-- >>> filtering (\a -> if a > 13 then Empty else Full (a <= 7)) (4 :. 5 :. 6 :. Nil)
-- Full [4,5,6]
--
-- >>> filtering (\a -> if a > 13 then Empty else Full (a <= 7)) (4 :. 5 :. 6 :. 7 :. 8 :. 9 :. Nil)
-- Full [4,5,6,7]
--
-- >>> filtering (\a -> if a > 13 then Empty else Full (a <= 7)) (4 :. 5 :. 6 :. 13 :. 14 :. Nil)
-- Empty
--
-- >>> filtering (>) (4 :. 5 :. 6 :. 7 :. 8 :. 9 :. 10 :. 11 :. 12 :. Nil) 8
-- [9,10,11,12]
--
-- >>> filtering (const $ True :. True :. Nil) (1 :. 2 :. 3 :. Nil)
-- [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
filtering ::
(Applicative k) =>
(a -> k Bool) ->
List a ->
k (List a)
filtering _ Nil = pure Nil
-- what the fuck even is this
filtering p (k :. ks) = f k <$> p k <*> filtering p ks
where
f :: a -> Bool -> List a -> List a
f _ False as = as
f a True as = a :. as
i made it worse? re: catflame status
filtering ::
(Applicative k) =>
(a -> k Bool) ->
List a ->
k (List a)
filtering p = foldRight g $ pure Nil
where
-- what the fuck even is this
g a as = f a <$> p a <*> as
f :: a -> Bool -> List a -> List a
f _ False as = as
f a True as = a :. as
structural recursion my beloved. still don't understand this though
re: i made it worse? re: catflame status
@vaporeon_ this is hard to expurress succinctly.
(C t) => ... means that in the type expurression ..., the type t is known to be a member of the typeclass C
an example of a typeclass is Eq, fur types that have total equality checks:
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
so, fur example, the following (extremely trivial) function, we contrain the polymorphism of f to parameterize only on types which are known instances of Eq, making it legal to polymorphically invoke the equality check on the generic parameter a:
f :: Eq t => t -> Bool
f a = a == a
re: i made it worse? re: catflame status
@aescling Oh! Now that you remind me, I do remember learning about typeclasses! Thank you!