应用式函子在函数式编程中, 应用式函子,或简称应用式(applicative),是在函子和单子之间的中间结构。应用式函子允许函子式计算成为序列(不同于平常函子),但是不允许使用前面计算的结果于后续计算的定义之中(不同于单子)。应用式函子是范畴论中具有张量强度的不严格幺半群函子的编程等价者。 应用式函子是2008年Conor McBride和Ross Paterson在他们的论文《Applicative programming with effects》中介入的[1]。应用式函子在Haskell中最初作为库特征出现,现在已经传播到了其他语言,包括Idris、Agda、OCaml、Scala和F#。为了方便使用应用式函子编程,Glasgow Haskell和Idris二者现在提供了专门设计的语言特征。在Haskell中,应用式函子实现在 定义在Haskell中,应用式是参数化类型,被当作这个类型的数据的容器,加上两个方法: pure :: a -> f a
它可被认为是把值带入应用式。类型 (<*>) :: f (a -> b) -> f a -> f b
它可被认为是在应用式内部函数应用的等价者[2]。 可作为替代,不提供 应用式还要求满足四个方程式定律[3]:
所有应用式都是函子。出于明确性,给定方法 fmap f x = pure f <*> x
常用的表示法 例子在Haskell中,Maybe类型可以做成类型类 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)
如定义章节所述, (+1) <$> n
如果 参见引用
外部链接 |
Portal di Ensiklopedia Dunia