首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一些范畴论上的概念

为了能真正理解Haskell中的Functor、Applicative、Monad、Monoid,以及它们到底有什么用,个人觉得还是有必要 了解 一些范畴论里面的概念的 函数 Function 函数表示特定类型之间的...所谓函子就是表示两个范畴之间的映射。 Haskell中,Functor是可以被map over的东西,List就是一个典型的instance。...这表达了一个范畴的元素可以被映射为另一个范畴的元素 我们看下Haskell中map函数的定义: map :: (a -> b) -> [a] -> [b] 把我们上面的Int String的例子代入,配合柯里化的概念可以得出...上图就是一个将范畴映射到自身的自函子。...对于函数而言,结合律就是将函数以各种结合方式嵌套起来调用。我们将Haskell中的 . 函数看做这里的二元运算。

8510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    实操教学|如何用Serveless3分钟做好邀请函?

    云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助大家在无需购买和管理服务器的情况下运行代码。...开发者只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。 云函数的这种设计架构,又被称为FaaS,函数即服务。...: 云函数创建完,我们就可以进入到终端,利用命令行来调用这个云函数,生成邀请函: 执行云函数以后,邀请函图片出来啦: 以上是对云函数的使用,我们如何修改云函数并重新部署呢?...首先需要安装Serverless FrameWork,这是业界非常受欢迎的无服务器应用框架,可以帮助通过联动云资源,迅速构建Serverless应用: 然后我们来下载云函数的代码并解压: 进入代码,我们修改一下邀请函的字体大小和颜色...,我们来重新执行一下发送邀请函的云函数: 邀请函更新啦,效果如下: 最后来谈一谈小灰本人的感受。

    1.2K20

    飞跃式发展的后现代 Python 世界

    Benjamin Pierce对类型系统的定义如下: …一种易于处理的语法,通过根据计算值的类型对词组分类证明了缺少了特定的程序行为 重点是证明有关运行空间的属性, 所有程序行为的运行空间替代了只是简单地罗列有限种情况的运行空间...全静态类型对于Python是否是正确的选择让人十分疑惑,但是在过度的动态类型和静态类型保证之间肯定有更加合适的方案。...我们也能定义更加高级的泛型结构例如函子和单元 ? 速度 “高性能”Python最近最重要的进展是Pandas库提供的更高等级DataFrame容器的开发。...诸如Scala、Haskell和Rust这样的语言以trait和typeclass这样的形式提供该问题的解决方案。例如Haskell可以自动地为所有类型的交叉产品推导出微分方程。 ?

    96160

    深入理解JavaScript函数式编程

    console.log(`支付了${money} RMB`); }); map - 函数作为参数 //模拟map函数 对数组中对每一个元素遍历改变每一个元素的值 使用const 不希望函数被修改定义为常量...柯里化(Haskell Brooks Curry) 使用柯里化解决纯函数的副作用.什么是柯里化呢?...当函数有多个参数的时候,对函数进行改造调用一个函数只传递并返回一个新的函数(这部分参数以后永远不会发生变化),这个新的函数去接收剩余的参数,返回结果。...这些问题引入了函子的概念 Fuctor函子 容器:包含值和值的变形关系(这个变形关系就是函数) 函子:是一个特殊的容器,通过一个普通的对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理...如下代码,定义两个函子,一个处理正确的结果,一个处理异常的结果,异常的处理直接返回this class Left { constructor(value) { this.

    4.3K30

    什么是函数式编程

    因此, 大部分函数式编程语言看起来都十分的"数学"(译者: 比如Haskell, 实际上JS也满足函数式编程的要求). 好消息是, 并不需要通过专门使用函数式编程语言来引入函数式编程范式....在第一个例子中, 我们使用了在函数体外部创建的变量number, 并且在函数体内部对它进行了修改. 这就打破了原则....此外, 对于多核的开发, 可以放心地向这些CPU核心分发函数的运行(译者: 因为只关心输入和输出了, 不会受到外部变量或者状态的影响), 继而能够达到更高的运行效率. 怎么样才能使用函数式编程?...函数式编程几乎可以通过任何一个编程语言来实现, 并不需要开发者去写Clojure或者Haskell(除非你真的想). 即使函数式原则遵循得并不纯粹, 函数式编程仍然能给你的代码带来不小的好处....另外需要注意, 这篇文章只是一个入门的介绍, 真正要系统学习函数式的话, 需要去了解离散数学相关的函子这一概念之类之类的.

    1.6K30

    深入理解函数式编程(下)

    Hooks的设计是很巧妙的,以useEffect为例: 图 43 在函数组件中,useState用来产生状态,在使用useEffect的时候,我们需要挂载这个state到第二个参数,而第一个参数给到的运行函数在...上面这个例子里面的Num,实际上就是一个最简单的Monad,而fmap是属于Functor(函子)的概念。...图 49 相对应的,函子就是描述一个范畴对象和另一个范畴对象间关系的态射,具体到编程语言中,函子是一个帮助我们映射一个范畴元素(比如Monad)到另一个范畴元素的函数。...科学解释一个Monad为自函子范畴上的幺半群。如果没有学习群论和范畴论的话,我们是很难理解这个解释的。...图 60 假设我们有一个代数类型Either,Left和Right分别表示当数据为错误和数据为正确情况下的逻辑。 图 61 这样,我们就可以使用“函数”来替代分支了。

    97530

    深入理解函数式编程(下)

    React Hooks的设计是很巧妙的,以useEffect为例: 在函数组件中,useState用来产生状态,在使用useEffect的时候,我们需要挂载这个state到第二个参数,而第一个参数给到的运行函数在...上面这个例子里面的Num,实际上就是一个最简单的Monad,而fmap是属于Functor(函子)的概念。...相对应的,函子就是描述一个范畴对象和另一个范畴对象间关系的态射,具体到编程语言中,函子是一个帮助我们映射一个范畴元素(比如Monad)到另一个范畴元素的函数。...科学解释一个Monad为自函子范畴上的幺半群。如果没有学习群论和范畴论的话,我们是很难理解这个解释的。...假设我们有一个代数类型Either,Left和Right分别表示当数据为错误和数据为正确情况下的逻辑。 这样,我们就可以使用“函数”来替代分支了。

    49310

    在 Visual Studio 上更好开发 Python 的六大功能!

    此项功能除了能够切换至您所熟悉的 Python 版本进行开发外,更可确保您的程序在不同 Python 版本下运行的函式相容性是合法的,如下图代码当中的 print 函式,在 Python 2.7 环境下为合法的...、快速谘询和自动完成文字等辅助功能,让您在撰写物件或者呼叫函式时能够更有信心,提高撰写效率。...对 Python 使用侦错模式 (Debugging) Visual Studio 针对 Python 支持完整侦错功能,例如在程序执行时能够暂止于中断点处,此时能检视或修改当下执行情况的区域变数以及呼叫堆叠...如下图展示 Python 程序运作在一块 Linux 嵌入式开发板上,同时在个人电脑内的 Windows 10 运行着Visual Studio 2015,其透过 ptvsd 套件能让您远端附加至序,直接对...Linux 嵌入式开发板上运行的 Python 程序进行如您所熟悉的侦错模式。

    1.6K10

    【单子】说白了不过就是【自函子范畴】上的一个【幺半群】而已?请说人话!!

    起初本瓜看到【单子】说白了不过就是【自函子范畴】上的一个【幺半群】而已?这句话的时候,还以为自己在看量子力学的量子纠缠相关内容,单子、函子、粒子、玻色子、费米子、绝绝子。。。...但是,要求总写没有任何副作用的纯函数是几乎不可能的; HTTP 请求、修改函数外的数据、输出数据到屏幕或控制台、DOM查询/操作、Math.random()、获取当前时间等,这些操作都会使函数产生副作用...」,async 函数中都是自函子映射,也就是一个「自函子范畴」,那么相对的「幺半群」就是Promise了。...阶段小结 函数式编程中,处处都是惰性思维的体现; Monad 也是惰性计算的实践之一;至于标题中的这句话:【单子】说白了不过就是【自函子范畴】上的一个【幺半群】而已?...推荐阅读 函数式语言的宗教 图解 Monad JS 中 Monad 学习函数式编程 Monad monadic.ts 如何解释 Haskell 中的单子(Monad)

    1.1K20

    编程语言:类型系统的本质

    通过一套类型规范,加上编译监控和测试机制,来实现软件系统的数据抽象和运行时数据处理的安全。 随着软件变得越来越复杂,我们越来越需要保证软件能够正确运行。...Haskell正变得越来越受欢迎。...静态类型系统在编译时确定所有变量的类型,并在使用不正确的情况下抛出异常。静态类型系统,将运行时错误转换成编译时错误,能够使代码更容易维护、适应性更强,对于大型应用程序,尤其如此。...但是使用动态类型系统的程序,很容易编写并且不需要花费很多时间来确保类型正确。所谓“鱼和熊掌不可兼得”,这就是关于“效率”与“质量”的哲学问题了。...这样一来,组件对其内部管理的数据能够做出的保证就得到了强化,因为如果不经过该组件的接口,外部代码将无法修改这些数据。 一个“参数化表达式”的面向对象继承体系的例子。类图如下。

    2.6K31

    为什么 Haskell 是我们构建生产软件系统的首选

    1Haskell 具有强大的静态类型系统,可防止错误并减少认知负担 Haskell 具有非常强大的静态类型系统,可作为程序员的辅助工具,在代码甚至没有运行之前就捕获并预防许多错误。...在开发过程中,除了紧密的反馈循环外,Haskell 代码还易于重构和修改。就像用其他任何语言编写的现实世界代码一样,用 Haskell 编写的代码也不会写一次就完事。...做出正确的断言。 全面(测试各种输入)并提供良好的覆盖范围(测试大部分代码库)。 易于运行并快速完成,否则它们将不会成为开发流程的一部分。 与它们测试的代码同步更新和维护。...Haskell 的类型系统没有上述问题。类型系统是这个语言的自带特性,编译器始终会验证类型是否正确。...这个观点可能是正确的,但我们发现 Haskell 与其他用于 Web 开发的语言之间的速度差异实在太大了。

    1.4K10

    定了!2020年,6种将死的编程语言!

    2 Haskell ? 据说,Haskell 即将在今年进行重大更新。有很多巨头公司和项目(Facebook、GitHub 等)曾经使用 Haskell 开发过一些重要项目。...2.Haskell 不仅被用于混合语言项目,还被用于构建完全用 Haskell 编写的端到端解决方案。3.Haskell 社区被认为能给用户提供许多支持。...虽然针对自己的CLR运行,微软创建了C#,但是它的工程师们另外还创建了一个盖茨深爱的BASIC语言版本,命名为Visual Basic.NET。...记得有一段时间,得益于Twitter平台——TweetDeck(要求用户在电脑上安装AIR运行时)的使用,AIR很是红火了一阵子。...那时大概有数以百万计的pc AIR应用被开发出来,只是后来Twitter在2011年买了TweetDeck之后,又改写本地代码取代了AIR。于是乎,AIR的辉煌就到此为止。

    1.5K20

    C++、Python、Rust、Scala 构建编译器的差异性究竟有多大?

    在最终的提交截止日期之后,会运行一次秘密的测试(我们看不到该测试),也就是说,自己编写测试用例并测试代码,可以保证编译器的健壮、正确,也可以处理边界情况。...我认为,考虑到Rust和Haskell的设计决定非常相似,都是表达性的,只有细微的差异,如Rust在需要时能够很方便地修改变量等。...虽然这有点风险,因为教授并没有推荐这一点,我是自学来的,但我发现它很易于使用,是个正确的决定。 我认为,这个团队可能并没有开发出Haskell的全部潜力。...在我看来这的确是个正确的选择,用“魔法”的方式使用Haskell编写编译器,会产生“Haskell写编译器的门槛非常高,如果你不考虑对于不太了解Haskell的人的可维护性的话”的结果,而这种结果并不是我们想要的...另一个有趣的发现是,教授在开始时说过,学生可以选择任何能够在学校服务器上运行的语言,但同时针对Haskell提出了警告,说过去使用Haskell的团队的分数的方差是最高的,因为许多选择Haskell的团队都高估了他们的

    1.4K40

    2017最受欢迎人工智能编程语言:Python第一,R并未上榜

    Haskell ? Haskell 是1990年开发的强静态类型,非限定性编程语言。由于Haskell开发人员不多,小公司很少尝试Haskell。...虽然你可以用任何语言编写这些算法,但Haskell相比其他语言更具表现力,同时保持不错的性能。例如,Haskell写的faster cover trees 。...Haskell支持领域特定语言(embedded domain-specific languages),这是一个着名的编程语言研究领域,适用于包括人工智能在内的许多领域。...Lisp开发的有数以千计的AI应用程序,包括: 美国运通的授权人助理,用于检查交易(信用卡) METAL,一种自然语言翻译系统 Macsyma,第一个大型计算机代数系统 ACL2,AMD使用的定理证明程序...如果你想控制运行时间和性能,C ++显然是一个很好的选择。 模板(template)使用更安全,它们提供了更好的推广API的方法。

    2.4K60

    ✨从代码复用讲起,专栏阶段性作结,聊聊?

    传送门 回顾 前 6 篇传送门: ✨从历史讲起,JavaScript 基因里写着函数式编程 ✨从柯里化讲起,一网打尽 JavaScript 重要的高阶函数 ✨从纯函数讲起,一窥最深刻的函子...多个mixins的生命周期会融合到一起运行,但是同名属性、同名方法无法融合,可能会导致冲突、很容易制造混乱。...再加上时间上的异步,乱上加乱,一层层去修改、覆盖值,刷新再刷新,很难再看清值变化的逻辑,还更加消耗性能。 函数式就有这个好: 用函数去运算值,而不更改值,函数组合就是值发生变化的过程。...我们稍作修改: var sine = function(x) { return [Math.sin(x), 'sine was called.']; }; var cube = function(...正确是借助 Monad 思想: 用 bind 函数将 children 函数改造成可组合的形式,即输出的类型和输入的类型一致,这样就可以组合了。

    61910
    领券