To install click the Add extension button. That's it.

The source code for the WIKI 2 extension is being checked by specialists of the Mozilla Foundation, Google, and Apple. You could also do it yourself at any point in time.

4,5
Kelly Slayton
Congratulations on this excellent venture… what a great idea!
Alexander Grigorievskiy
I use WIKI 2 every day and almost forgot how the original Wikipedia looks like.
Live Statistics
English Articles
Improved in 24 Hours
Added in 24 Hours
Languages
Recent
Show all languages
What we do. Every page goes through several hundred of perfecting techniques; in live mode. Quite the same Wikipedia. Just better.
.
Leo
Newton
Brights
Milds

Applicative functor

From Wikipedia, the free encyclopedia

In functional programming, an applicative functor, or an applicative for short, is an intermediate structure between functors and monads. In Category Theory they are called Closed Monoidal Functors. Applicative functors allow for functorial computations to be sequenced (unlike plain functors), but don't allow using results from prior computations in the definition of subsequent ones (unlike monads). Applicative functors are the programming equivalent of lax monoidal functors with tensorial strength in category theory.

Applicative functors were introduced in 2008 by Conor McBride and Ross Paterson in their paper Applicative programming with effects.[1]

Applicative functors first appeared as a library feature in Haskell, but have since spread to other languages as well, including  Idris, Agda, OCaml, Scala and F#. Glasgow Haskell, Idris, and F# offer language features designed to ease programming with applicative functors. In Haskell, applicative functors are implemented in the Applicative type class.

While in languages like Haskell monads are applicative functors, it is not always so in general settings of Category Theory - examples of monads that are not strong can be found on Math Overflow.

YouTube Encyclopedic

  • 1/3
    Views:
    501
    351
    3 408
  • Haskell Monad: Example of concatenating two IO String. Part 2 of 5
  • Haskell Monad: Example of concatenating two IO String. Part 3 of 5
  • Functor или Объект-Функция

Transcription

Definition

In Haskell, an applicative is a parameterized type that we think of as being a container for data of the parameter type plus two methods pure and <*>. The pure method for an applicative of parameterized type f has type

pure :: a -> f a

and can be thought of as bringing values into the applicative. The <*> method for an applicative of type f has type

(<*>) :: f (a -> b) -> f a -> f b

and can be thought of as the equivalent of function application inside the applicative.[2]

Alternatively, instead of providing <*>, one may provide a function called liftA2. These two functions may be defined in terms of each other; therefore only one is needed for a minimally complete definition.[3]

Applicatives are also required to satisfy four equational laws:[3]

  • Identity: pure id <*> v = v
  • Composition: pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
  • Homomorphism: pure f <*> pure x = pure (f x)
  • Interchange: u <*> pure y = pure ($ y) <*> u

Every applicative is a functor. To be explicit, given the methods pure and <*>, fmap can be implemented as[3]

fmap g x = pure g <*> x

The commonly-used notation g <$> x is equivalent to pure g <*> x.

Examples

In Haskell, the Maybe type can be made an instance of the type class Applicative using the following definition:[2]

instance Applicative Maybe where
    -- pure :: a -> Maybe a
    pure a = Just a

    -- (<*>) :: Maybe (a -> b) -> Maybe a -> Maybe b
    Nothing  <*> _        = Nothing
    _        <*> Nothing  = Nothing
    (Just g) <*> (Just x) = Just (g x)

As stated in the Definition section, pure turns an a into a Maybe a, and <*> applies a Maybe function to a Maybe value. Using the Maybe applicative for type a allows one to operate on values of type a with the error being handled automatically by the applicative machinery. For example, to add m :: Maybe Int and n :: Maybe Int, one needs only write

(+) <$> m <*> n

For the non-error case, adding m=Just i and n=Just j gives Just(i+j). If either of m or n is Nothing, then the result will be Nothing also. This example also demonstrates how applicatives allow a sort of generalized function application.

See also

References

  1. ^ McBride, Conor; Paterson, Ross (2008-01-01). "Applicative programming with effects". Journal of Functional Programming. 18 (1): 1–13. CiteSeerX 10.1.1.114.1555. doi:10.1017/S0956796807006326. ISSN 1469-7653.
  2. ^ a b Hutton, Graham (2016). Programming in Haskell (2 ed.). pp. 157–163.
  3. ^ a b c "Control.Applicative".

External links

This page was last edited on 27 November 2023, at 10:18
Basis of this page is in Wikipedia. Text is available under the CC BY-SA 3.0 Unported License. Non-text media are available under their specified licenses. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc. WIKI 2 is an independent company and has no affiliation with Wikimedia Foundation.