• 这篇Motivation for Monads其实谈了为什么需要函数编程和Monad?指出函数编程的几个特点,与
  • 很多人认为数学家喜欢数字。然而,这并不完全正确。数学家 喜欢精确、清晰,最重要的是,他们喜欢理解结构。人们将数学与数字联系起来的唯一原因是因为我们喜欢量化事物。但对普通大众来说不太清楚的是,我们量化不是为了好玩,我们量化是为了理解、组织、定义。附加到数学概念上的数值有助于我们更好地理
  • 使用Monad可以解决下面两个问题: 1. 假设每个函数会按次序共享一个全局状态,那么我们使用StateMonad。多个函数共享一个全局状态在面向对象范式中是使用对象Object完成,状态作为对象的字段,而函数作为对象的方法,如下: icon
  • 函数编程中Functor函子与Monad是比较难理解的概念,本文使用了形象的图片方式解释了这两个概念,容易理解与学习,分别使用Haskell和Swift两种语言为案例。 1. 函子functor是一种实现fmap或map的数据类型2. applic icon
  • Monad是一种设计模式,使用一系列步骤来描述计算,它们典型地使用在纯函数语言中用于管理副作用,也可使用在多范式语言中用来控制复杂性。 Monad封装类型带来了附加的行为,比如空值(Maybe monad)的自动传播,或简化异步代码(Continuatio icon
  • 到目前为止,在 Go 中创建函数 filter() 是很困难的,它可以根据谓词的布尔值来过滤任何元素的列表。如果你知道列表的类型,这是有可能的。 icon
  • 在Go 1.18之前,当你想从Go中的map中提取一个键列表时,你必须编写代码来迭代map并将键添加到一个slice中。从1.18起,有了新的泛型功能,你可以写一个单一的通用函数,从任何map中获取键,并在需要时使用它。不用再为特定类型的map编写代码了。伴随着Go 1.18 icon
  • 排序是新泛型功能的一个非常自然的用例。在Go中对slice进行排序是以前每次有新的slice类型时都要重新编写的事情之一。有时你会为两种不同的类型使用相同的代码。从Go 1.18开始,由于新的泛型功能,这不再是一个问题了。你可以编写一个单一的通用排序函数,它适用于任何 icon
  • 根据这篇文章触发的灵感,写了两篇定义性文章: 什么是Monoid? icon
  • 检查一个数组是否包含一个给定的值是一个流行的编程函数,在许多编程语言中都是原生实现的。在Go中,我们必须自己实现它,但由于新的泛型功能,我们可以编写一个单一的contains()函数,它将适用于任何类型的slice,其值可以被比较。 icon
  • 基于线性代数monad的Monad模式代表了逐步将操作链接在一起的方式。绑定函数可以描述为根据“相同类型”契约将一个输出传递给另一个输入。在形式上,monad由一个类型构造函数M和两个操作组成:bind - 它将monadic对象和一个函数从普通对象转换为monadic值并返回,monadi icon
  • 从slice中获取最小值和最大值是开发人员在日常编码中编写的一些最简单的函数。问题是,当你想从int和float64s这个slice中获取最小值或最大值时,1.18版本以前,你不得不为每个slice类型写两个函数。然而,从1.18版本开始,Go引入了备受期待的泛型函数,现在你 icon
  • 这是来自数学家背景的大牛通过以时钟为比喻形象解释了群论和函数编程中的一些抽象概念,如Monoid、Monad等等。 下面大意翻译,原文见: icon
  • 什么是函子?事实:如果您有Blob的来源,以及可以将Blob转换为Thing的函数,则可以将它们放在一起以创建Things的来源。例子: 如果我有 A(一个整数列表)和 B(一个将整数转换为字符串的函数),我可以轻松创建 C( icon
  • map()函数是另一种函数式编程范式,由于新的泛型功能,它可以在Go中轻松实现。它的工作原理是应用一个函数,将单个slice元素作为参数,对其进行转换,并返回输出值,其中采取和返回的类型不一定相同。例如,你可以使用map()函数将字符串转换成int的slice;或者格式化字符 icon
  • Monad 设计模式是一种函数式编程概念,它提供了一种以简洁优雅的方式封装复杂操作和计算的方法。通过提供一组用于组合函数和处理副作用的规则和约定,Monad 允许您编写易于阅读、维护和测试的代码。 无论您是初学者还是经验丰富的开发人员,学习 Mon icon
  • reduce()函数是由 JavaScript 和 Python 等其他编程语言推广的函数式编程概念。它的工作原理是通过对数组中的每个元素应用一个产生部分结果的函数,将一个数组还原成一个单一的值。最后一项之后的结果是整个列表的累积值。到目前为止,在 Go 中,创建这种适用于不 icon
  • 这里介绍可以迭代 Map 和 List 最简单直接办法,代码量最少。 方法 1:标准for方法:List: icon