catflame status 

-- what the fuck even is this

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

context, code re: catflame status 

the thing about following the types and using the compiler to find the types of your holes is that, while it will create code that compiles and apparently passes the tests, it will also create code that is inscrutable to YOU

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 

@aescling If you don't mind an extremely stupid question from someone who has forgotten all the Haskell that they ever learned: What does => do? I remember -> basically specifying the list of arguments, but I don't remember what => did

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!

Follow

re: i made it worse? re: catflame status 

@vaporeon_ if it's eeveening yet fur ny’all then feel free to take a look at the code if you still want to try to purrocess it

Sign in to participate in the conversation
📟🐱 GlitchCat

A small, community‐oriented Mastodon‐compatible Fediverse (GlitchSoc) instance managed as a joint venture between the cat and KIBI families.