首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >-> (Identity⊕m) a‘的自然转化的好名字是什么?

-> (Identity⊕m) a‘的自然转化的好名字是什么?
EN

Stack Overflow用户
提问于 2015-08-27 12:44:51
回答 2查看 168关注 0票数 5

我发现自己用签名写了一堆函数

代码语言:javascript
运行
复制
a -> Either longComplicatedType (m longComplicatedType)

所以我决定我需要一个化名

代码语言:javascript
运行
复制
type SomeAlias m a = Either a (m a)

使之成为函子m上的一个自然变换,与forall a. m a -> (Identity ⊕ m) a同构。

起初,我很想把它命名为MaybeNMaybeF,因为它要么使用函子m,要么什么也不使用。但是Maybe a1 ⊕ a同构,所以MaybeN f a应该是Either (Proxy a) (f a)

我可以从其他地方盗取forall a. m a -> (Identity ⊕ m) a的现有名称吗?如果没有,还有比IdentityOr更优雅的名字吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-11 02:37:57

您所要求的东西以Lift的名义存在。

代码语言:javascript
运行
复制
data Lift g a = Pure a | Other (g a)

这可以用SumIdentity定义为类型同义词。

代码语言:javascript
运行
复制
data Sum :: (k -> Type) -> (k -> Type) -> (k -> Type) where
  InL :: f a -> (Sum f g) a
  InR :: g a -> (Sum f g) a

newtype Identity :: Type -> Type where
  Identity :: a -> Identity a

type Lift g a = (Sum Identity g) a

但这不会给您提供一个ApplicativeAlternative实例。

Sum f g只是在非常特殊的情况下(给定一个单线自然变换forall xx. (Applicative g, Applicative f) => g xx -> f xx)的应用程序(更多信息:http://comonad.com/reader/2012/abstracting-with-applicatives/http://www.staff.city.ac.uk/~ross/papers/Constructors.html)。这是为了

代码语言:javascript
运行
复制
mnt :: forall xx. Applicative f => Identity xx -> f xx
mnt (Identity x) = pure x

Lift g就是这个特例。

票数 2
EN

Stack Overflow用户

发布于 2015-08-27 23:24:32

这似乎与InRData.Functor.Sumf = Identityg = m同构。

数据和f_g_a= InL (f _ a) _ InR (g _ a)

然而,当库委员会选择这些名称时,就有了相当多的自行车;您可能会在那里找到一些其他的替代方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32249756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档