代码写得太BT,恶心死了
例:
convert :: String -> String
convert s = let (Right str) = do { n <- parseHex s; toString n } `catchError` printError
in str
where printError e = return $ "At index " ++ (show (location e)) ++ ":" ++ (reason e)
修改版:
convert :: String -> String
convert s = case (parseHex s >>= toString) of
Left e -> "At index " ++ (show (location e)) ++ ":" ++ (reason e)
Right str -> str
(见Error Monad, example12)
还有那个Count Monad,开始几遍硬是没有看懂,后来看看wikibook上面的解析才明白啥意思,有必要这么复杂吗,用if, case, guard 等都可以简单的处理。。没明白这里到底有什么优势。CPS可以控制流程,但是如果代码处理的好,也不会出现这种极端情况,有如goto之于命令式语言。
Monad Transformers 一开始又是那个恶心的代码。。
全文没有一张图,难道没有听过一句话,“一图胜千言”!!!
看得恶心,恶心,恶心
看得不懂,不懂,不懂
分享到:
相关推荐
monad-一个功能强大的python包 笔记 该项目已被Hymn( )取代。 受Python语法的限制,无法完全实现do表示法,最接近的是生成器函数上的do装饰器,使用yield as <- ,感觉就像黑魔法。 这就是为什么我停止在...
Monad是函数式编程中的一个核心概念,特别是在Haskell和Scala这样的语言中,它的重要性不言而喻。"Grokking Monad"很可能是一本旨在帮助程序员深入理解Monad的书籍或者在线资源,通过购买链接<https://gum.co/...
ppx_monad 是 OCaml 的 monad 语法扩展,它提供了两种主要的 monad 语法:干净但不完整的 Haskell 风格的 monad 语法和冗长但完整的 let monad 语法。 Haskell 风格的 monad 语法 要使用此语法,您需要使用[%monad ...
Racket 中的 Monad,一种动态类型语言这个库展示了一种以动态类型语言处理 monad 的方法,包括一种实现返回类型多态的方法。 它开始是一个实验,记录在,查看动机和与其他方法的比较等。 代码使用的功能代替 Haskell...
平行哲学与智能科学:从莱布尼茨的Monad到区块链之DAO 本文从新的角度回顾科学和哲学的本源,认为需要以新的思想发展人工智能和智能技术及其相应的智慧社会。围绕卡尔•波普尔的三个交织世界的现实观,提出面向描述...
Data :: Monad-Perl的monad的实现 描述 是Perl的monad的实现。 该模块标记为EXPERIMENTAL 。 API可能会更改,恕不另行通知。 作者 hiratara 也可以看看 执照 该库是免费软件。 您可以按照与Perl本身相同的条款重新...
Monad转换器(Monad Transformers)是Monad的一个扩展,它允许我们组合不同的Monad,以实现更复杂的控制流和数据处理。这个名为"TransformersStepByStep: monad 转换器教程"的资源,很可能是为了帮助程序员深入理解...
Monad-ts是一个小型库,实现了一些关键的monad以及将它们链接到JavaScript和Typescript的流(管道)中的方法。 兼容Angular 2+ 。 。 内容 介绍 所有单子 也许 列表 状态 附加工具(类和功能) 异步流 流 投 克隆...
在标题“monad:将单子语言翻译成逻辑”中,我们可以理解为探讨如何利用Monad来构建和解释一种语言,并将其映射到逻辑表达上。这涉及到将具有Monad特性的代码转换为形式逻辑系统中的等价表达,以便于理解和验证。 ...
Monad Transformer则是将一个Monad嵌入到另一个Monad中,形成一个新的Monad,这样就可以在不破坏纯性的前提下,将多个Monad的功能结合在一起。`mtl`库提供了许多常见的Monad Transformer实现,如`MaybeT`、`StateT`...
C++ 中的 Haskell 延续 monad C++ 中 continuation monad 的基本但有效的实现。 Qt 可以使用它来缓解回调地狱 特色: boost::optional 、 Continuation和一些 Qt 数据类型的 Monad 实现。 一些基本的一元函数,...
Task Monad是一种在编程中处理异步操作的概念,尤其在JavaScript这样的单线程环境中,它能够帮助我们更好地组织和管理异步代码。这个“task-monad”仓库显然专注于探索和实现Task Monad的概念,以便于开发者理解和...
Monad入门,简介。英文版。介绍什么是Monad,以及如何使用Monad,还有如果自己定义Monad。
Swift Monad 是一种编程概念,源于函数式编程语言,如 Haskell 和 Scala,被引入到苹果的 Swift 语言中,用于处理可变性和副作用。Monad 是一个抽象的概念,它提供了一种结构化的方式来组合操作,特别是在处理可能...
"movie-monad" 是一个专为IT爱好者和Haskell编程语言粉丝设计的免费、开源视频播放器项目。这款播放器以其简洁易用的界面和强大的功能赢得了用户的青睐。在本文中,我们将深入探讨movie-monad的核心特点、技术栈以及...
monad.js 为 NodeJS(或任何 CommonJS 实现)提供了简单的 monadic 数据类型。 也许 也许代表一个可能存在也可能不存在的值。 当一个值或函数的结果可能会或可能不会产生有意义的东西时,这是很自然的。 传统上, ...
2. **Monad组合器(Monad Combinators)**:这些是用于操作Monad的实用函数,如`lift`系列函数,它们帮助在不同Monad之间转换和组合计算。 3. **标记的Monad转换器(Tagged Monad Transformers)**:这是一种特殊的...
使用和声生成器的 Node.js 的 Monad do-notation。 这是一个可能的 monad 的例子: var monad = require ( 'node-monad' ) . monad ; var NOTHING = { } ; var maybe = monad ( function unit ( error , value ) ...
Monad-Memo库是Haskell编程语言中用于实现记忆化(Memoization)的一个工具,它主要应用于函数式编程。记忆化是一种优化技术,通过缓存函数的计算结果来避免重复计算,提升性能。在Haskell这样的纯函数式语言中,...
**Free Monad**是一种在函数式编程中广泛使用的抽象,它允许我们定义操作的语义而不涉及具体的执行方式。在Scala中,Free Monad尤其适合构建领域特定语言(DSL),因为它们可以提供一种干净、抽象的方式去描述计算...