Haskell “Const”和函子的乘积的名称?

Haskell “Const”和函子的乘积的名称?,haskell,functor,Haskell,Functor,SF是否已在任何地方定义,或者至少有一个名称 data SF a f x = SF a (f x) instance Functor f => Functor (SF a f) where fmap g (SF a fx) = SF a (fmap g fx) 你的函子看起来像 type SF a f = (,) a :. f 使用符号 (不知何故,我更喜欢使用合成,而不是使用乘积和Const)您可以定义函子乘积 data (f :* g) a = P (f a) (g a) d

SF
是否已在任何地方定义,或者至少有一个名称

data SF a f x = SF a (f x)

instance Functor f => Functor (SF a f) where
  fmap g (SF a fx) = SF a (fmap g fx)

你的函子看起来像

type SF a f = (,) a :. f
使用符号


(不知何故,我更喜欢使用合成,而不是使用乘积和
Const

您可以定义函子乘积

data (f :* g) a = P (f a) (g a) deriving Functor
然后直接写下来

type SF a f = Const a :* f

看起来您正在声明一个包含另一个函子的函子。好吧,现在还没有,但这并不意味着它不存在于我从未使用过的某个随机包的角落。@Code peedient,我正在定义一个函子转换器
SF a f
与函子
f
相同,但它附加了一个
a
类型的附加值。(它同构于
Const a
Identity
的乘积)@ArtyomKazak因为函子(和应用函子)是组合的,所以不需要类似(应用)函子转换器的东西。请参阅中的
Data.Functor.*
模块。的一个更为主流的名称是
transformer
包中的
Compose