Functor / Applicative是否可以绑定到一种特定的类型或结构?

问题描述 投票:2回答:2

我正在尝试理解适用的类型类,尤其是<*>函数。现在,我看到它的类型签名是f (a -> b) -> f a -> f b,并且我认为f是函子,我认为这是一种包装一些数据的结构。在我看来f必须处理通用类型,特别是f必须具有参数化类型ab,并且实际上它还必须支持a -> b如果我的理解是正确的,那么我们正在做的工作是使用类型类f,该类最初旨在包装一些数据,例如字符串列表或包含文件缓冲区的树或我们可能想要的任何随机对象。但是f不能提交给任何一种类型,因为它不仅必须处理这种类型,而且还需要处理从数据到其他数据的函数。因此,如果我们有一个<*>的示例实现,其中包含

Just2 f <*> j = fmap f j

读取方式是jJust2内部的某种数据。 f是将数据映射到数据的功能。 f包裹在Just2中。

这一切对吗?从根本上来说,我的问题是:所有适用性都必须如此泛泛,以至于它总是可以同时处理任意数据,并且还可以处理数据之间的数据吗?还是有某种方法可以使您拥有一个应用程序,使得它内部允许的唯一数据是列表?

我试图了解适用的类型类,尤其是功能。现在我看到它的类型签名是f(a-> b)-> f a-> f b,我认为f是一个函子,...

haskell functor applicative
2个回答
2
投票
对于“常规” FunctorApplicative,您是正确的;他们需要能够处理任何类型的值。这称为

parametric polymorphism


2
投票
是的,您的理解在很大程度上是正确的。特别是,任何特定的<*>,例如一个名为Applicative的,都具有功能Foo的相关专业化,其类型签名为:
© www.soinside.com 2019 - 2024. All rights reserved.