Monad-进阶理解

Haskell语言的学习路线 学习Haskell是一段挑战性的旅程,但也是一种丰富的经历。通过系统的学习路线,你可以一步步掌握这门优雅而强大的语言。从基础概念到高级特性,实践和不断学习是掌握Haskell的关键。希望本文的学习路线能够帮助你在Haskell的学习过程中少走弯路,加深对函数式编程的理解,提高你作为程序员的综合素质。祝你在Haskell的学习旅程中取得丰硕的成果! 阅读详情

一 一个例子(按此贴的理解:http://blog.youkuaiyun.com/crazyhacking/article/details/8270930)

定义:

data Position t=Position t deriving (Show)

stagger (Position d)=Position (d+2)
crawl (Position d)=Position (d+1)


rtn x=x
x>>==f=f x

使用:
treasure pos=pos>>==
             stagger >>==
             stagger >>==
             crawl>>==

             rtn


运行:

treasure (Position 0)
Position 5
it :: Position Integer

理解:

1 从这个例子上来说,可以把monad视为对一堆函数的封装。

>>==   rtn 是这种封装的标志。

2 >>==是类型下降,rtn是类型提升。(二者均不是关键字)

>>==首先把类型Position d中取出d进行计算,最后rtn又把d提升为Position d.



参考:http://blog.pmonad.com/2012/07/06/monad-purpose.html

http://www.iteye.com/topic/147443

http://cookoo.iteye.com/blog/27006

如何理解 Free Monad? FP中有个比较拗口的monad  : Free 这里转自知乎的一个答案:   夏梓耀,理想主义码农,非战斗人员请迅速撤离 凉宫礼、Alex RENG、king zin 等人赞同 菜鸟来回答一下  Free最大的价值在于Monadic for-comprehension和Interpreter,前者只要描述算法,后者随意解释,可类比为接口和实现。 Free 可以 阅读详情

相关推荐

Aspose Java 25.10 版本深度破解:基于字节码修改的实战指南

本文提供了Aspose Java 25.10版本基于字节码修改的实战指南。详细介绍了如何通过Javassist工具逆向分析并修改Aspose Cells、Words、Slides及PDF组件的许可证验证逻辑,从而实现绕过限制,并完成最终的打包与功能验证。

stone的博客 1352

【函数式】Monads模式初探——Monad概念

单子单子(Monad)是一种将函子组合应用的方法。在计算机科学里,单子经常用来代表计算(computation)。单子能用来把与业务无关的通用程序行为抽象出来,比如有用来处理并行(Future)、异常(Option和Try等)、甚至副作用的单子。 单子的flatMap和unit操作作为构建数据类型的基本操作,可以实现很多复杂的高阶函数。单子的程序描述Monad定义了unit和flatMap两个函数

Jason Ding的专栏 1万+

Python自动化生成HyperMesh Tcl命令流:从几何建模到有限元分析

本文详细介绍了如何利用Python自动化生成HyperMesh的Tcl命令流,实现从几何建模到有限元分析的全流程二次开发。通过封装常用操作函数,工程师可以高效完成参数化建模、自动网格划分及求解器文件输出,显著提升CAE前处理效率与标准化水平。

weixin_29041767的博客 423

C# Monads的实现(一)

了解Haskell语言的朋友都知道它是一门纯函数式编程,输出结果只跟输入参数相关,这导致Haskell不能有输入输出函数,因为不同的环境下,输入相同,但输出可能有所不同。Haskell语言中,变量的值一旦被赋值,则不会再被修改,所以这也导致了它就无法输出——因为输出会改变屏幕。那Haskell中如何实现输入输出功能? Haskell中输入输出的功能是通过Monad方法实现的。本篇不讨论Haske...

weixin_30608131的博客 269

保姆级教程:用OpenCV和MediaPipe在Python里实现实时手势识别(附完整代码)

本文提供了一份详细的Python教程,教你如何使用OpenCV和MediaPipe实现实时手势识别系统。从环境配置、手部关键点检测到手势分类算法,逐步讲解如何构建高精度手势识别应用,适用于智能家居控制、PPT操作等场景。教程包含完整代码示例和性能优化技巧,特别适合计算机视觉初学者和开发者实践。

weixin_28677005的博客 327

告别复杂配置:dbswitch vs 传统工具(Kettle/DataX)在Greenplum数据同步中的性能对比

本文深入对比了新兴工具dbswitch与传统ETL工具Kettle、DataX在Greenplum数据同步中的表现。重点分析了dbswitch如何通过免中间文件、利用二进制COPY协议等设计,在异构数据库同步场景下实现更优的性能和更简化的配置,为技术选型提供清晰参考。

transformer2023的博客 1046

monad-本质解释- a monad is a design pattern--monad与泛型相关

monad的特征: 类型转化+添加新的操作。 monad RACStream RACSignal RACSubject monad:单一体,(不可分的)个体 以计算为中心的封装。 In functional programming, a monad is a design pattern that defines how functions, actions, i...

diaoju3333的博客 289

将CityScapes数据集转换为COCO格式的实例分割数据集

##¥##2019年结束前最后两小时,写出本年度最后一篇博客,不是博主没地方去跨年,实在是Coding乐趣无穷ahhhh ##¥## COCO数据集是研究实例分割的通用数据集,但是针对道路环境的数据较少,对于自动驾驶和移动机器人的应用并不适配。而提供道路环境的实例分割数据的数据集目前有KITTI、CityScapes、Apllo等,CityScapes算是应用较广,数据质量较高的一个,所以,本篇...

陆羽飞的博客 9940

【函数式】Monads模式初探——for解析式

for表达式是monad语法糖先看一组示例:case class Person(name: String, isMale: Boolean, children: Person*)val lara = Person("Lara", false) val bob = Person("Bob", true) val julie = Person("Julie", false, lara, bob) val

Jason Ding的专栏 3688

轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)

共轭梯度法的核心原理是求解优化问题的共轭向量组作为优化方向,由于优化方向间彼此正交,故每次迭代只需沿着一个方向寻优而互不影响。本文设计基于ESDF的障碍约束、曲率约束和平滑约束,基于ROS C++和Python提供了共轭梯度法的轨迹优化实践案例

FRIGIDWINTER的博客 1万+

弱网、高热、只有 32MB 内存:恶劣环境下嵌入式 SoC 音视频开发的“不死”法则

永远不要假设。你申请一个 1920 宽的图像,硬件为了对齐(比如 16 字节对齐或 256 字节对齐),实际分配的一行可能有 1936 甚至是 2048 字节。那个多出来的部分叫Padding。如果你写代码时用来计算数据量,或者用Width来做指针偏移:恭喜你,你的画面会像被风吹歪的百叶窗一样,产生斜切畸变。永远使用VB_CONF结构体里返回的u32Stride字段。这是区分新手和老手的试金石。第六章 ISP 调优(Tuning)实战:为什么你调出的画面像个“鬼片”?

大模型大数据攻城狮的专栏 1769

Lemonad Monad解析:从lift到actions理解函数式状态管理的进阶指南

JavaScript的函数式编程热潮从未消退,而如果你正在寻找一个轻量、优雅的**函数式编程库**来实践**Monad解析**与**函数式状态管理**,那么Lemonad绝对值得你花十分钟深入了解。Lemonad是一个受Clojure、Haskell、SML等语言启发的JavaScript函数式编程库,它的作者将其定位为"一个关于优雅JavaScript的实验"。在这篇**Lemonad Mona

gitblog_00767的博客 501

VCAST创建单元测试工程

选择工作目录,后面创建胡UT工程将会生成到这个目录。

qq_42851449的博客 2481

Scalaz(32)- Free :lift - Monad生产线 企

在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,www.njtw123.com比如:free monoid, free monad, free category等等。我们也证明了List[A]是个free monoid。我们再看看free monad结构Free的定义:scalaz/Free.scala   /** A free operational monad

慕斯筱婕 533

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

函数式编程 -- 测试题集

文章内容输出来源:拉勾教育 大前端高薪训练营 函数式编程 选择题 下面关于函数式编程的说法错误的是:(多选题) A. 函数式编程是一种编程范式,跟面向对象编程是并列关系 B. 函数式编程可以很大程度上让代码可以重用 C. 函数式编程可以很大程度上提高程序的性能 D. 函数式编程中的函数是程序中的函数或者方法 * **答案解析** -- CD C 选项函数式编程不能提高程序的性能,因为大量使用闭包在某种程度上会.

zimeng303的博客 892

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Haskell 状态Monad (State Monad)的理解

1、State s a数据类型 State s a是一种用来封装状态处理函数(又叫:状态处理器):\s -> (a,s’)的数据结构,因为State封装的是一个状态处理器(state processor)而不是状态s本身,所以称State为State类型(type)是不准确的。 newtype State s a = State { runState :: s -> (a,s) } -...

天涯爱生活 2817

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

理解Monad,一份monad的解惑指南

\本文要点:\\避免显式地处理状态值是有必要的\\t通过使用monad,你就可以移除代码中对状态值的明确处理。\\t一个monads类型必须与特殊的函数(名为“bind”)相联系\\t用了monad的bind函数后,状态值会从一个monad传递给下一个,而且始终在monad中(而非明确地在代码中被处理)\\t许多问题都可以用monad来解决\\\随着函数式编程的再次兴起,“monad” 这种函数式...

cpongo5 309

通过Scala理解什么是Monad

什么是Monad? traitMonad[+T]{ defflatMap[U](f:(T)=>Monad[U]):Monad[U] defunit(value:B):Monad[B] } Monads 就是一个values的容器,...

778

学习笔记十六——Rust Monad从头学

如果一个东西(比如 Option、Result、Future)能做到包值 + 链操作 + 保持上下文结构不变,它就是一个 Monad。就像数学里的“加法结合律”,Monad 定律是确保你写的链式操作是稳定的、不会因为写法不同导致逻辑出错。类型类型构造器unitbind(链接)OptionSome(x)ResultOk(x)Futureasync{}

pumpkin84514的博客 1747

怎样理解Functor与Monad

1. 复合函数操作符 Prelude> :t (.) (.) :: (b -> c) -> (a -> b) -> a -> c Prelude> (.) ((+) 5) ((*) 2) 4 13    所以(.)操作符的作用,是将4作为参数传递给((*) 2)函数,再将结果传递给((+) 5)函数。 这就是数学里面的复合函数: ...

weixin_34138056的博客 520

monad理解

就是因为可以存在f*g*m 等等这种多层复合映射,而不是只有单一的f(x)这种单一映射。幺半群的三个特性,本质上就是为了可以有效的进行链式操作。同时结合律的特性保证了函数式程序的编译执行过程中,可以自主进行函数的优化结合进行性能优化。2. 将结果有变化的地方,用monad进行封装。每个学习monad的人都要写一份自己理解的monad。然后还是包括自己没人能看到自己在写啥,而且大部分写的还是错误的。只能封装成monad的形式,才能保证返回的是一个符合monad要求的对象,可以一直去链式调用。

silver9886的专栏 507

Kotlin Monad的学习

文章目录0. 前言1. 概述1.1 起源1.2 Monad 可以看成一种设计思想1.3 数学概念1.3 Monad 的模板代码2. arrow-kt 中的代码实例总结参考 0. 前言 在学习函数式编程时,函子(Funtor)、单子(Monad) 是非常难啃的骨头,它们来自于数学范畴论,又只在 Haskell 这种满是学术气息的语言上发展,本来阅读了几篇 Kotlin 上介绍该概念的文章,但是感觉吸收不够好,所以写这篇文章来学习和记录。 此外,FP Kotlin 框架 arrow-kt 里面已经具象了这个概

RikkaTheWorld 3981
上一篇: 函數副作用-纯函数
下一篇: linux 软件安装各种方法
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值