Prelude Control.Applicative> :i Applicative class Functor f => Applicative f where pure :: a -> f a (<*>) :: f (a -> b) -> f a -> f b (*>) :: f a -> f b -> f b (<*) :: f a -> f b -> f a -- Defined in `Control.Applicative' instance Applicative [] -- Defined in `Control.Applicative' instance Applicative ZipList -- Defined in `Control.Applicative' instance Monad m => Applicative (WrappedMonad m) -- Defined in `Control.Applicative' instance Applicative Maybe -- Defined in `Control.Applicative' instance Applicative IO -- Defined in `Control.Applicative' instance Applicative (Either e) -- Defined in `Control.Applicative' instance Applicative ((->) a) -- Defined in `Control.Applicative'
pure の働きは「引数を文脈に入れて返す」と考えることができます。このことを「値を持ち上げる」といいます。
こんな感じみたいですね。
Prelude Control.Applicative> pure 1 1 Prelude Control.Applicative> pure 1 :: Maybe Int Just 1 Prelude Control.Applicative> pure 1 :: [Int] [1]