Haskell 类型注释容器“(,)e)”的函子实现在哪里?
将Haskell 类型注释容器“(,)e)”的函子实现在哪里?,haskell,tuples,typeclass,functor,Haskell,Tuples,Typeclass,Functor,将(,)e)列为Functor的一个实例,并对其进行如下描述 (,)e)表示一个容器,其中包含一个类型为e的“注释”及其所包含的实际值。类似于像(1+)这样的操作符部分,将其写为(e,),可能更清楚,但类型中不允许使用这种语法(尽管在启用了TupleSections扩展名的表达式中允许使用这种语法)。但是,您当然可以将其视为(e,) 我正在研究各种类型类的实现,以提高我的理解。目前正在研究函子实现,但似乎找不到其中的一些,例如(,)e)和((->)e)。在哪里实现了(,)e)的函子实例?: 通常
(,)e)
列为Functor
的一个实例,并对其进行如下描述
(,)e)
表示一个容器,其中包含一个类型为e的“注释”及其所包含的实际值。类似于像(1+)
这样的操作符部分,将其写为(e,)
,可能更清楚,但类型中不允许使用这种语法(尽管在启用了TupleSections
扩展名的表达式中允许使用这种语法)。但是,您当然可以将其视为(e,)
我正在研究各种类型类的实现,以提高我的理解。目前正在研究函子实现,但似乎找不到其中的一些,例如(,)e)
和((->)e)
。在哪里实现了(,)e)
的函子实例?:
通常,查找实例的一种方便方法是查看数据类型的实例列表(在几乎所有情况下,您都会在其中至少一个实例中找到该实例)并遵循源链接
正如李耀霞在中所指出的,另一个路径是在GHCi中使用:i(,)
,它将列出(,)
范围内的所有实例以及它们定义的模块。(在这种特定情况下,这恰好是GHC.Base
,它不能通过直接访问,尽管它可以在文档中以及分散在文档中的源链接中找到,例如Data.Functor
中实例列表中的链接)它在(以及其他地方)中声明。该文件包括GHC文件。其他实现可能会有所不同。(,)e)
还有一个非常“容器化”的comonad实例:
丢弃上下文并返回值。我有时用它来代替sndextract::(e,a)->a
将值和上下文放在值中duplicate::(e,a)->(e,(e,a))
根据上下文转换值extend::((e,a)->b)->(e,a)->(e,b)
:info(,)
将告诉您对类型的实例源。可能的重复
instance Functor ((,) a) where
fmap f (x,y) = (x, f y)