News for hackers. Stuff that matters.
Re:Functional programming jargon in plain English by mjburgess on Monday July 04, 2022 @06:31AM (#31975543)
In my simple language, `F` is that context. And (A->B) is a single-argument function.

   // Int -> Float
   oneArgFn(x) = x + 1.1

   // List of Int -> List of Float
   ctxOneArgFn(xs) = ListFunctor(oneArgFn, xs) //ie., map()
Re:Functional programming jargon in plain English by reuben364 on Monday July 04, 2022 @07:44AM (#31975982)
Single-argument doesn't capture the difference between functor and applicative.

  ex1 :: Functor f => f (Int, Int) -> f Int
  ex1 = map (uncurry (+))
Applies a multi-argument function within a functor. What applicative allows you do is take a product of contexts to a context of products, and lift a value to a context.

  pure :: a -> f a
  zip :: (Applicative f) => (f a, f b) -> f (a, b)
This can then be used to make ex1 into a multi-argument function of contexts, which is not the same as (uncurry (+)) being a multi-argument function

  ex2 :: (Functor f) => (f Int, f Int) -> f Int
  ex2 = ex1 . zip
Re:Functional programming jargon in plain English by mjburgess on Monday July 04, 2022 @08:23AM (#31976277)
Sure, it's a particular interpretation of `(f a, f b) -> f (a, b)`

    (a, b) is an a -> b
    (f a, f b) is an f a -> f b
Applicative, over an above this, is really just useful when you have (f a, f b, f c, ..)
Re:Functional programming jargon in plain English by shikoba on Monday July 04, 2022 @08:07AM (#31976157)
You're just reducing my idea to a specific case. You missed the generalized idea.