什么是常数函子?

zer*_*ing -2 haskell category-theory

我正在尝试从https://en.wikipedia.org/wiki/Functor网站了解Constant Functor,并且无法进行视觉成像。

如果有人可以将其显示为haskell代码,这也将是一件好事,Constant Functor是什么,以及它的优点是什么。

sar*_*ara 6

常数函子是目标函数为常数函数的函子。在haskell中:

newtype Const r a = Const { unConst :: r }

instance Functor (Const r) where
  fmap _ (Const r) = Const r
Run Code Online (Sandbox Code Playgroud)

它在某种意义上将每种类型映射ar,并将每种类型a -> b的功能映射到身份函数r

const功能对类似的事物有好处!传递给高阶函数等

一个有趣的用例是基于透镜的吸气剂的定义。

  • 身份函数是“ id x = x”。我指的是这样的事实:对于f和r的所有可能对,fmap f(Const r)== id(Const r)== Const r` (2认同)

lef*_*out 6

与常量函数一样:常量函子是 \xe2\x80\x9cignores\xe2\x80\x9d 其参数的任何函子,并且还有一个简单的fmap操作。

\n\n

在 Haskell 中,这意味着每个值F a仅包含不a以任何方式包含的数据。也就是说,它只是其他一些固定类型,比如说R。显然,这可以是任何类型,因此实际的标准Const函子将其作为另一个参数:

\n\n
newtype Const r x = Const { getConst :: r }\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个 ( Hask -endo-) 函子,因为它将任何类型映射x到另一个类型Const r x\xe2\x80\x93 ,而后者实际上与 是同构的r。还有fmapping,它应该只更改结构x内的值Const r x...好吧,没有,所以没有任何更改。

\n\n
instance Functor (Const r) where\n  fmap _ (Const r) = Const r\n
Run Code Online (Sandbox Code Playgroud)\n