在范畴理论中,一个单子是两个伴随函子的组合。例如,也许单子是由遗忘函子组成的自由点集函子。同样地,列表单子是由遗忘函子组成的自由么半函子。
半群是最简单的代数结构之一,所以我想知道编程是否可以从更复杂的结构中受益。我在标准的Haskell包中没有找到免费的组单子,所以我将在这里定义它
data FreeGroup a = Nil | PosCons a (FreeGroup a) | NegCons a (FreeGroup a)
自由环和向量空间(它们总是自由的)呢?
对于任何代数结构s
,一个范畴自由函子fs::set->s
的存在意味着Haskell调用fold的函数的存在:
foldS :: S s => (a -> s) -> FS a -> s
它将基于a
的函数提升为自由对象FS a
上的S
-morphism。通常的foldr
函数是foldmonoid
的专门化(在Haskell中称为foldmap
,出于某种原因,我不太明白),monoid是函数的集合b->b
,组合为乘法。
mult :: FreeGroup a -> FreeGroup a -> FreeGroup a
mult Nil x = x
mult x Nil = x
mult (PosCons x y) z = PosCons x (mult y z)
mult (NegCons x y) z = NegCons x (mult y z)
inverse :: FreeGroup a -> FreeGroup a
inverse Nil = Nil
inverse (PosCons x y) = mult (inverse y) (NegCons x Nil)
inverse (NegCons x y) = mult (inverse y) (PosCons x Nil)
groupConcat :: FreeGroup (FreeGroup a) -> FreeGroup a
groupConcat Nil = Nil
groupConcat (PosCons x l) = mult x (groupConcat l)
groupConcat (NegCons x l) = mult (inverse x) (groupConcat l)
instance Functor FreeGroup where
fmap f Nil = Nil
fmap f (PosCons x y) = PosCons (f x) (fmap f y)
fmap f (NegCons x y) = NegCons (f x) (fmap f y)
instance Applicative FreeGroup where
pure x = PosCons x Nil
fs <*> xs = do { f <- fs; x <- xs; return $ f x; }
instance Monad FreeGroup where
l >>= f = groupConcat $ fmap f l
“免费团体monad有任何编程用途吗?”
由于在过去的四个月里缺乏答案,我想答案是‘不,不是真的’。但这是一个有趣的问题,因为它是基于基本的数学概念,所以在我看来(也)它应该是。
首先,我注意到提议的自由组功能也可以很容易地用一个a列表来实现,
type FreeGroupT a = [Either a a]
fgTofgT :: FreeGroup a -> FreeGroupT a
fgTofgT Nil = []
fgTofgT (a :+: as) = Right a : fgToList as
fgTofgT (a :-: as) = Left a : fgToList as
fgTTofg :: FreeGroupT a -> FreeGroup a
fgTTofg [] = Nil
fgTTofg (Right a : as) = a :+: fgTTofg as
fgTTofg (Left a : as) = a :-: fgTTofg as
--using (:-:) instead of NegCons
--and (:+:) instead of PosCons
但是,作为一个正确的用例,这个示例失败了,因为我们希望'a':+:'b':+:'b':-:'a':-:[]
与[]
是相同的程序,但实际上并非如此。此外,将每个列表术语包装在上面讨论过的Off中也很容易。
我看到自由单子这个词时不时地出现了一段时间,但每个人似乎只是在使用/讨论它们,而没有给出它们是什么的解释。那么:什么是自由单子?(我会说我熟悉单子和Haskell基础,但对范畴理论只有非常粗略的知识。)
在Mark Seemann的博客文章和示例中,我第一次看到了免费单子作为构建纯代码和IO代码之间边界的一种方式。我的基本理解是,一个免费的单子可以让您构建一个纯函数的程序(抽象语法树-AST),然后解释器将其翻译成一系列不纯的过程调用。因此,这个解释器将AST的纯操作转换为一系列的一元IO操作。 我想知道这是否复制了Haskell运行时已经在IO Monad上做的事情。如果我认为IO没有什么特别的
我正在尝试使用 JCA 和 CICSECI 功能通过 CICS 事务网关连接到 IBM 大型机。 我的Servlet代码是: 我得到的解释是: 我的服务器.xml如下: 我的POM是: 当我搜索错误代码时。IBM文档声明:https://www . IBM . com/support/knowledge center/en/SSZHFX _ 9 . 2 . 0/ctg 9628 e . html
我不知道免费单子是用来做什么的,也不知道单子转换器库是什么。我也听说过mtl和自由单子的辩论,但我不确定是什么,因为我在互联网上找不到任何关于这一点的讨论。 有人能解释一下这场争论是关于什么的吗?
《自由软件,自由社会:理查德·斯托曼选集》Free Software, Free Society: Selected Essays of Richard M. Stallman是一本指导了无数人的书籍,它将理查德·斯托曼的自由软件哲学和思想,阐述的淋漓尽致。 此书第一版首发于 2002 年。也是在 2002 年,北京 GNU/Linux 用户组(BLUG)成立了,经过十多年的发展壮大,已经成为中国
绘图工具是指可以直接操作 Highcharts 的渲染层并绘制基础的图形,例如直接在图表中添加 圆形、矩形、路径或文字,甚至是独立于图表的图形。 在主流的浏览器中绘图工具对象是 SVG 的封装,对应的在低版本 IE (IE8 以下)中是 VML 封装。 已经实例化的图表对象可以通过 chart.renderer 来获取绘图工具对象,如果需要独立图表的绘图工具对象,请通过 var renderer