category-theory相关内容
https://wiki.haskell.org/Hask : 考虑: undef1 = undefined :: a -> b undef2 = \_ -> undefined 请注意,这些值不相同: seq undef1 () = undefined seq undef2 () = () 这可能是个问题,因为undef1 . id = undef2.为了使 Hask
..
最近,我终于开始觉得自己能理解变态.我在最近的答案中写了一些关于它们的内容,但我会简要地说一遍,在递归过程中对类型的抽象化遍历该类型的值,并对该类型具有的每个构造函数将该类型上的模式匹配化为一个函数.虽然我欢迎上面链接的我的回答中的这一点或更长版本的任何更正,但我认为我或多或少都对此有所保留,这不是这个问题的主题,只是一些背景. 一旦我意识到传递给目录转换的函数完全对应于该类型的构造函数,并
..
(注意:我使用Haskell术语来表述这个问题;欢迎使用相同的术语和/或类别理论的数学语言来回答,包括适当的数学定义和公理,其中我涉及函子和莫纳德定律.) 众所周知,每个monad也是函子,函子的fmap等同于monad的liftM.这是有道理的,并且当然适用于所有常见/合理的monad实例. 我的问题是fmap和liftM的等价性是否可证明是根据函子和莫纳德定律得出的.如果是这样,很
..
据我了解,Haskell的递归数据类型对应于Hask类别[ 1 , 2 ].例如: 自然数data Nat = Zero | Succ Nat对应于endofunctor F(-) = 1 + (-)的初始代数. 列表data List a = Nil | Cons a (List a)对应于endofunctor F(A, -) = 1 + A × (-)的初始代数. 但是,我不清
..
考虑一个成员为* -> *类型的类型类.例如:Functor类型类.众所周知的事实是,在Haskell中,此类型类与其数学(即,类别理论)类似物之间存在对应关系.概括: 问题1: Haskell中成员类型为* -> *的每个类型类是否都与类别之间的 some 函数相对应? 现在考虑一个成员为*类型的typeclass.例如,可以想象一个类型类Group与组的类别相对应(从技术上讲,Gr
..
我尝试写下joinArr :: ??? a => a r (a r b) -> a r b. 我想出了一个使用app的解决方案,因此将a的范围缩小到了ArrowApply的范围: joinArr :: ArrowApply a => a r (a r b) -> a r b joinArr g = g &&& Control.Category.id >>> app 是否可以将此功能记为箭
..
不久前,我了解到Monoidal是表示Applicative的另一种方式.关于 Typeclassopedia : 有一个有趣的问题 (Tricky)证明从第一个练习[使用unit和(**)写下的pure和()以及相反的方法],常规的Applicative律和上述法律是等效的. 以下是这些类别和法律: -- A note from https://wiki.haskell
..
不久前我问了这个问题.关于以下箭头法则: arr fst . first f = f . arr fst -- (.) :: Category k => k b c -> k a b -> k a c 在帖子 Asad Saeeduddin 下的评论中,它以自然转化的方式对其进行了解释. >.我想检查一下我的理解是否正确,并将其与 Bartosz Milewski的进行比较有关自然转化的
..
Applicative类型类表示松散的单项仿函数,该函子将笛卡尔单项结构保留在类型化函数的类别上. 换句话说,给定证明(,)形成单曲面结构的规范同构: -- Implementations left to the motivated reader assoc_fwd :: ((a, b), c) -> (a, (b, c)) assoc_bwd :: (a, (b, c)) -> ((
..
我想了解 Representable 在Haskell中代表.定义 Haskell类型类别中具有代表性的endofunctors对读者monad是同构的,因此可以免费继承大量属性. 对我来说还不够清楚.我想看一个真实的例子,以了解如何使用tabulate和index方法. 所以我的问题是: 可代表对象的用途是什么? 能否请您澄清一下定义并提供示例? 解决方案 Re
..
从类别理论的角度来看,这个答案包括以下陈述: ...事实是,协函子和逆函子之间并没有真正的区别,因为每个函子都只是协变函子. ... 更详细地讲,从类别C到类别D的逆变函子F仅仅是对立类别F :
..
最近几天,我一直在阅读附加语.当我从理论的角度开始理解它们的重要性时,我想知道人们在Haskell中如何以及为什么使用它们. Data.Functor.Adjunction 提供了一种实现,实例是免费仿函数/健忘仿函数和 curry/没事.从理论的角度来看,这些还是很有趣的,但是我看不到如何将它们用于更实际的编程问题. 是否存在人们使用Data.Functor.Adjunction解决的编程
..
据我所知,函子是两个类别之间的映射,例如来自 其中 和 是类别. 在Haskell中,存在 Hask ,其中对象是Haskell类型,而态射是Haskell函数.但是,Functor类型类具有函数fmap,该函数在这些类型(因此是对象而不是类别本身)之间进行映射: fmap :: (a -> b) -> f a -> f b f a和f b都是 Hask 中的对象.这是否意味着Ha
..
我有点困惑,需要有人将我摆平.让我们概述一下我目前的理解: 其中E是endofunctor,而A是某种类别: E : A -> A. 由于Haskell中的所有类型和词素都属于Hask类别,因此Haskell中的 functor 也是 endofunctor 吗? F : Hask -> Hask. 我很高兴自己错了,并且以某种方式简化了这个过程,我希望有人告诉我我是个白痴.
..
具体指的是“> https://bartoszmilewski.com/2015/04/07 /natural-transformations/ 作者说“这不是函子". 我可以将fmap :: (a -> b) -> (a -> a) -> (b -> b)定义为fmap f aa = id,这似乎符合函子定律. 我不是说为什么它不是X语言中的Functor类型类的明确组成部分,
..
当我问此问题时,现在已删除的答案之一,表明真相在哪里? 解决方案 混淆源于逻辑的布尔真值表说明.特别是,当两个参数均为True时,OR为True,而XOR为False.从逻辑上讲,这意味着证明“或"就足以提供其中一个论点的证明.但是如果另一个也为True也可以-我们不在乎. 在Curry-Howard解释中,如果有人给您Either a b的元素,并且您能够从中提取a的值,则您对b仍
..
在范畴论中,filter运算是否被视为态射?如果是,那是什么射晶呢?示例(在Scala中) val myNums: Seq[Int] = Seq(-1, 3, -4, 2) myNums.filter(_ > 0) // Seq[Int] = List(3, 2) // result = subset, same type myNums.filter(_ > -99) // Seq[In
..
在类别理论8.2 的末尾,巴托斯·米列夫斯基(Bartosz Milewski)显示了一些示例逻辑,范畴论和类型系统之间的对应关系. 我在徘徊与逻辑异或运算符相对应的内容.我知道 a xor b == (a ∨ b) ∧ ¬(a ∧ b) == (a ∨ b) ∧ (¬a ∨ ¬b) 所以我只解决了部分问题:a xor b对应于(Either a b, Either ? ?).但
..
好像我很清楚地了解Haskell中的Monoid是什么,但是上次我听说了一个称为免费类半身像的东西. 什么是免费的半身像,它与一个半身像有什么关系? 您可以在Haskell中提供示例吗? 解决方案 在编程环境中,我通常将 free monoid 转换为[a].在有关针对程序员的类别理论的精彩文章系列中,,Bartosz Milewski将Haskell中的免费类人动物描述为列表
..
我已经从 Monoid形态,产品和副产品,并且无法理解100%. 作者说(强调原文): length函数从String映射到Int ,同时保留 单体结构.这样的功能,可以将一个半身像映射到 另一个以这种保存方式被称为 monoid homomorphism .在 一般而言,对于Monoid M和N,同态f: M => N和所有值 x:M,y:M,以下等式成立: f(x |+| y
..