谁首先说了以下几点?
monad只是endofunctors类别中的幺半群,问题是什么?
在一个不太重要的注意事项上,这是真的,如果是这样,你能给出一个解释(希望有一个可以被没有Haskell经验的人理解的那个)吗?
我在函数式编程和PLT圈子中多次听到过"enggebras"这个术语,特别是在讨论对象,comonads,镜头等时.谷歌搜索这个术语给出了对这些结构进行数学描述的页面,这对我来说几乎是不可理解的.任何人都可以解释一下代数在编程环境中的意义,它们的意义是什么,以及它们与对象和共同体的关系?
haskell functional-programming scala category-theory recursion-schemes
是的,这些:
{-#LANGUAGE TypeOperators, RankNTypes #-}
import Control.Morphism.Zygo
import Control.Morphism.Prepro
import Control.Morphism.Histo
import Control.Functor.Algebra
import Control.Functor.Extras
import Control.Functor.Fix
import Control.Comonad.Cofree
zygohistomorphic_prepromorphism
:: Functor f
=> Algebra f b
-> GAlgebra f (ZygoT (Cofree f) b) a
-> (f :~> f)
-> FixF f
-> a
zygohistomorphic_prepromorphism f
= g_prepro (distZygoT (liftAlgebra f) (distHisto id))
Run Code Online (Sandbox Code Playgroud)
是的,我知道他们是(HHOS)的笑话.我正在寻找一个简单的黑客价值的真实世界的例子,最后,但并非最不重要的是,将它添加到维基说"这是表达XYZ的惯用方式".如果你没有提出解决方案,我会对此表示赏心悦目.如果你完全迷失了他们的意思,爱德华在reddit上发布了一个简短的解释.
符合条件的答案必须:
至少做一些远程的,理论上计算上有用的东西.也就是说,减少的答案id已经消失.
使用该方案的所有功能,不传入id,const或等效.
不能用简单的香草褶皱等表达,所以不要仅仅product以蜿蜒的方式实施.
奖励积分将给予:
众所周知的问题或算法
解决,分别表达,以一种不寻常的方式获得
清晰度和/或性能
和/或黑客价值
和/或lulz,大致按此顺序,以及
高级答案(耶和华民主)
请注意爱德华的答案如下.您使用的ZHPM实施是您的选择.
我一直在读类别理论中的单子.monads的一个定义使用一对伴随函子.monad是使用这些仿函数的往返定义的.显然,在类别理论中,附加是非常重要的,但我没有看到关于伴随函子的Haskell monad的任何解释.有没有人给它一个想法?
到目前为止,我遇到的每个monad(可以表示为数据类型)都有相应的monad变换器,或者可以有一个.有这样一个不能有一个单子吗?或者所有monad都有相应的变压器?
通过对应于monad的变换器t,m我的意思t Identity是同构的m.当然,它满足monad变压器法则,并且t n是任何monad的monad n.
我希望看到每个monad都有一个证明(理想情况下是建设性的证明),或者没有一个证明(带证明)的特定monad的例子.我对更多面向Haskell的答案以及(类别)理论答案感兴趣.
作为后续问题,是有一个单子m是有两个不同的变压器t1和t2?也就是说,t1 Identity同构t2 Identity和m,但有一个单子n这样t1 n是不是同构t2 n.
(IO并且ST有一个特殊的语义,所以我不在这里考虑它们,让我们完全忽略它们.让我们只关注可以使用数据类型构造的"纯"monad.)
我已经从Monoid Morphisms,Products和Coproducts中阅读了有关Monoid同态的知识,并且无法理解100%。
作者说(强调原文):
该
length函数从映射到String,Int同时保留类半体结构。这种以一种保存方式从一个单半体映射到另一个单半体的函数称为单半体同态。通常,对于monoidM和N,是同态f: M => N,以及所有值x:M,y:M以下等式成立:Run Code Online (Sandbox Code Playgroud)f(x |+| y) == (f(x) |+| f(y)) f(mzero[M]) == mzero[N]
他的意思是说,由于数据类型String和Int是monoid ,并且函数length映射String => Int保留了monoid结构(Int是monoid),所以称为monoid同态,对吗?
haskell functional-programming scala category-theory monoids
每当有人承诺"解释monad"时,我的兴趣就会被激怒,只有当被指称的"解释"是一长串的例子时才会被沮丧所取代,这些例子是由一些副手的评论所终止的,即"数学理论"背后的"深奥"在这一点上,"是"太复杂而无法解释".
现在我要求相反的事情.我对类别理论有着扎实的把握,我并不害怕图表追逐,Yoneda的引理或衍生的函子(实际上是在分类意义上的monad和adjunction).
有人能给我一个清晰简洁的定义monad在函数式编程中的含义吗?越少越好的例子:有时一个清晰的概念说明了一百多个胆小的例子.尽管我不挑剔,但Haskell作为演示语言会做得很好.
我对这三个概念感到非常困惑.
有没有简单的例子来说明Category,Monoid和Monad之间的区别?
如果有这些抽象概念的说明,将会非常有帮助.
我们从类别理论中知道,并非Set中的所有endofunctors都承认一个免费的monad.规范的反例是powerset仿函数.
但是Haskell可以将任何仿函数变成一个免费的monad.
data Free f a = Pure a | Free (f (Free f a))
instance Functor f => Monad (Free f) where
return = Pure
Pure a >>= f = f a
Free m >>= f = Free ((>>= f) <$> m)
Run Code Online (Sandbox Code Playgroud)
是什么让这个构造适用于任何Haskell仿函数但在Set中分解?
关于这是一个数学问题还是一个问题,我有点犹豫不决,但我怀疑数学家一般不太可能不太了解或关心这个类别,而Haskell程序员可能会这么做.
因此,我们知道Hask或多或少都有产品(当然,我正在使用idealized-Hask).我对它是否有均衡器感兴趣(在这种情况下它将具有所有有限的限制).
直观地看起来并不是这样,因为你不能像套装一样进行分离,因此一般来说,子对象看起来很难构建.但是对于你想要提出的任何特定情况,似乎你可以通过在Set中计算均衡器并计算它来破解它(因为毕竟,每个Haskell类型都是可数的,并且每个可数集都是同形或者是有限类型,也可以是自然类,Haskell都有.所以我看不出我是如何寻找反例的.
现在,阿格达似乎更有前途一点:那里是比较容易形成子对象.显而易见的sigma类型? A (? x ? f x == g x)是均衡器吗?如果细节不起作用,它在道德上是均衡器吗?
category-theory ×10
haskell ×10
monads ×5
monoids ×3
scala ×2
agda ×1
free-monad ×1
functor ×1