Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 类型注释容器“(,)e)”的函子实现在哪里?_Haskell_Tuples_Typeclass_Functor - Fatal编程技术网

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实例:

  • extract::(e,a)->a
    丢弃上下文并返回值。我有时用它来代替snd
  • duplicate::(e,a)->(e,(e,a))
    将值和上下文放在值中
  • extend::((e,a)->b)->(e,a)->(e,b)
    根据上下文转换值
切题注释:“类型注释容器”表示在类型级别发生的事情;简单地说,“注释容器”作为一种描述效果更好。(也可能值得强调的是,它只是一对,而“注释容器”只是对它的另一种思考方式,也就是说,作为附加了其他内容的值。)在ghci中,
:info(,)
将告诉您对类型的实例源。可能的重复
instance Functor ((,) a) where
    fmap f (x,y) = (x, f y)