Functional programming 除了幺半群之外,函数式编程中还有其他代数结构吗?

Functional programming 除了幺半群之外,函数式编程中还有其他代数结构吗?,functional-programming,algebraic-data-types,fortress,abstract-algebra,Functional Programming,Algebraic Data Types,Fortress,Abstract Algebra,我最近开始了解函数式编程(在Haskell和Scala中)。它的功能和优雅是相当迷人的 但是当我遇到Monads时,它使用了一种叫做Monoid的代数结构,我很惊讶,也很高兴看到我从数学中学到的理论知识在编程中得到了应用 这个观察给我带来了一个问题:在编程中是否可以使用组、字段或环(其他请参见)来实现更多的抽象和代码重用目的,并实现类似数学的编程 据我所知,名为的语言(在编译完成后,我肯定会优先于任何语言)在其库代码中定义了这些结构。但到目前为止,我看到的唯一用途是数字类型,我们已经很熟悉了。它

我最近开始了解函数式编程(在Haskell和Scala中)。它的功能和优雅是相当迷人的

但是当我遇到Monads时,它使用了一种叫做Monoid的代数结构,我很惊讶,也很高兴看到我从数学中学到的理论知识在编程中得到了应用

这个观察给我带来了一个问题:在编程中是否可以使用组、字段或环(其他请参见)来实现更多的抽象和代码重用目的,并实现类似数学的编程

据我所知,名为的语言(在编译完成后,我肯定会优先于任何语言)在其库代码中定义了这些结构。但到目前为止,我看到的唯一用途是数字类型,我们已经很熟悉了。它们还有其他用途吗

致以最良好的祝愿,
ciun

Haskell's是单子的一种推广,可能与之相关。

您可以对许多结构进行建模。以下是一组:

class Group a where
    mult :: a -> a -> a
    identity :: a
    inverse :: a -> a

instance Group Integer where
    mult = (+)
    identity = 0
    inverse = negate

-- S_3 (group of all bijections of a 3-element set)
data S3 = ABC | ACB | BAC | BCA | CAB | CBA
instance Group S3 where
    mult ABC x = x
    ... -- some boring code
    identity = ABC
    inverse ABC = ABC
    ... -- remaining cases

-- Operations on groups. Dual:
data Dual a = Dual { getDual :: a }
instance Group a => Group (Dual a) where
    mult (Dual x) (Dual y) = Dual (mult y x)
    identity = Dual identity
    inverse (Dual x) = Dual (inverse x)

-- Product:
instance (Group a, Group b) => Group (a,b) where
    mult (x,y) (z,t) = (x `mult` z, y `mult` t)
    identity = (identity, identity)
    inverse (x,y) = (inverse x, inverse y)
现在,您可以编写
mult(双驾驶室,5)(双CBA,1)
并获得结果。这将在S3组中进行计算*⨯ Z.您可以添加其他组,以任何可能的方式组合它们,并使用它们进行计算


环、字段、排序、向量空间、类别等也可以做类似的事情。不幸的是,Haskell的数字层次结构建模不好,但有人试图解决这个问题。还有一个极端的例子。对于类型类之旅(主要由范畴理论推动),有一个包含大量示例和应用程序的列表。

我推荐Edward Kmett的非常可读且相关的软件包。这可能会让你忙上好几年。

这并不完全是你想要的,但《Typeclassopedia》中的文章可能仍然很有意思:它是哈斯克尔前奏曲中几个类型类(
Functor
Applicative
Monoid
Arrow
)的详细解释。