Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >monad是否保证有一种获得“未包装”类型的方法?

monad是否保证有一种获得“未包装”类型的方法?
EN

Stack Overflow用户
提问于 2018-01-05 11:25:20
回答 2查看 66关注 0票数 0

引用埃里克的回答:C#中的monad --为什么绑定实现需要传递函数才能返回monad?

但是,如果g返回一个monad,而f不返回这个monad,那么就不存在f和g的组合--不能保证从monad的实例返回到“解包装”类型。

这是否意味着,如果g和f都返回monad ,那么monad 将保证这些方法可以从这个实例返回到一个“未包装的”类型。但是怎么做呢?有人能向我解释一下这一点吗?

更新:感谢和的回答,现在我知道从M获取T不是Monad的要求(API)的一部分,而是从Monad绑定函数实现本身,它应该知道如何从M<T>获取T,否则,如何在绑定函数中调用Func<T, M<R>>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-05 11:40:21

不,这不是Monad定义的属性之一。Haskell Monad页面清楚地解释说,您不能直接从M a中获取一个a。引语是,一旦您从T转到了M<T>,您总是需要使用M<T>,因此使用了起重

票数 1
EN

Stack Overflow用户

发布于 2018-01-05 14:04:11

正如亚伦已经说过的,答案是否定的。在我看来,最简单的例子就是经常被称为Maybe monad或Option的例子,您不能总是从单曲中“回来”。您可以在这里看到C#中的实现:https://mikhail.io/2016/01/monads-explained-in-csharp/

我不太了解C#,所以我将避免编写代码,并尝试用文字来解释它。

要对可能失败的计算进行建模,我们可以使用一个数据类型,它要么是值,要么是空值(想想null的替代方案)。要求该数据类型为单一类型的要求如下:

  • 如果我们有一个永不失败的计算,返回B类型的东西,那么我们就可以得到一个返回Maybe<B>的等量计算。这是return构造函数,它简单地将值包装在Maybe中。
  • 我们可以组合可能失败的计算。多么?如果第一次失败了,一切都会失败。如果没有,则将返回的值传递给下一个函数。这就是绑定的行为。
  • 我们还需要一些有效的法律,但为了简单起见,让我们忘掉它吧。

考虑一下我们组成两个可能会失败的函数的情况。我们总能得到价值吗?嗯,不总是这样。当这两个函数都没有失败时,我们得到一个值。

我现在试着用代码来解释它。当我错的时候你可以纠正我。因此,假设我们有一个maybeValue类型的A

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Maybe<A> maybeValue = ...;

我们有一个函数foo,它接受A类型的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Maybe<B> foo(A a) {...}

我们想把maybeValue传给foo。Monad允许您这样做,而无需检查maybeValue是否有值。你这样做吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Maybe<B> result = maybeValue.bind(foo)

再说一遍:我可以总是把result转换成B类型的东西吗?我是说,result总是包含一个值吗?嗯,不是。只有当maybeValuefoo都成功的时候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48120024

复制
相关文章
Scalaz(17)- Monad:泛函状态类型-State Monad
  我们经常提到函数式编程就是F[T]。这个F可以被视为一种运算模式。我们是在F运算模式的壳子内对T进行计算。理论上来讲,函数式程序的运行状态也应该是在这个运算模式壳子内的,也是在F[]内更新的。那么
用户1150956
2018/01/05
1.8K0
java 包装类型
{tabs-pane label="自动装箱(Auto Boxing)自动拆箱(Auto Unboxing)"}
await
2021/09/09
5310
获得外贸订单的途径有哪些方法
作为一名有多年外贸经验的外贸人,我深知获取订单对于外贸业务的重要性。希望这些方法能够帮助正在寻找外贸订单的外贸人士。
用户10479906
2023/04/10
7180
获得外贸订单的途径有哪些方法
JavaScript基本包装类型
知识点: 1.基本包装类型概述 2.Boolean类型 3.Number类型 4.String类型 为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类型:Boolean、Number和String。这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据。 一.基本包装类型概述 var box = ‘Mr. Lee’;
汤高
2018/01/11
1.4K0
JavaScript基本包装类型
Java基本包装类型
基本类型的对象包装,也就是将常用的基本数据类型包装成对象 byte Byte short Short int Integer long Long boolean Boolean float Float double Double char Character 最常用的作用就是基本数据类型与字符串的转换1. 基本数据类型转字符串: 基本数据类型+”” 基本数据类型类.toString(基本类型的数值)2.字符串转成基本数据类型: Integer.parseInt() Long.parseLog() 对c
lwen
2018/04/17
8240
JavaScript基本包装类型
js中为了便于基本类型操作,提供了3个特殊的引用类型:Boolean、Number、String它们具有基本类型特殊行为。 实际上,每当读取一个基本类型的时候,js内部会自动创建一个基本包装类型对象,可以让我们调用一些方法来操作。
青梅煮码
2023/02/18
2440
[nptl][pthread]一种判断thread是否在执行的方法
前言: 主线程中怎么确定某线程是否在执行? 作者遇到这个问题,第一感觉有点蒙。翻了一下glibc的代码,算是找到一个比较好的办法吧。 分析: 1,变量控制 这个很简单,在线程执行进入的时候,写控制变量running = true。线程将要退出的时候,写控制变量running = false,判断running这个变量就可以知道线程是否在执行了。 这个方法简单粗暴,在绝大多数的情况下都是能工作的。但是,有一种比较极端的情况:某线程正好赋值完控制变量,但是函数体还没有结束(对应的内核task当然也还在),这
皮振伟
2018/04/09
2K0
[nptl][pthread]一种判断thread是否在执行的方法
Java基本类型和包装类型
POJO 的英文全称是 Plain Ordinary Java Object,翻译一下就是,简单无规则的 Java 对象,只有属性字段以及 setter 和 getter 方法,示例如下。
崔笑颜
2020/06/08
8440
全面探索Optional类型
最近,出版社邀请我作为分享导师为Bruce Eckel的大作OnJava录制部分视频,视频内容主要面向Java初学者。录制到14.4章节,书中详细介绍了Java 8引入的Optional类型,我忽然想起很早以前写的一篇文章《并非Null Object这么简单》。
张逸
2023/03/23
3980
全面探索Optional类型
Kotlin版图解Functor、Applicative与Monad
这很简单。 那么扩展一下,我们说任何值都可以放到一个上下文中。 现在你可以把上下文想象为一个可以在其中装进值的盒子:
bennyhuo
2020/02/20
1.2K0
包装类型与基本数据类型的异同
Java 语言提供了八种基本类型:六种数字类型(四个整数型,两个浮点型), 一种字符类型,还有一种布尔型。
慕白
2020/01/02
5740
红宝书 📒 5.3 基本引用类型-原始包装类型
首先,思考一个问题:我们定义一个字符串,这个字符串是一个原始值,那么为什么我们可以对其使用方法呢?如下
用户4793865
2023/01/12
2710
Scalaz(19)- Monad: \/ - Monad 版本的 Either
  scala标准库提供了一个Either类型,它可以说是Option的升级版。与Option相同,Either也有两种状态:Left和Right,分别对应Option的None和Some,不同的是L
用户1150956
2018/01/05
5870
来看看几种 Monad来看看几种 Monad
https://learnyoua.haskell.sg/content/zh-cn/ch12/a-fistful-of-monads.html
一个会写诗的程序员
2018/12/12
1.1K0
金蝶一面:基本数据类型有哪些?包装类型的常量池技术了解么?
对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。
Guide哥
2022/04/11
4920
金蝶一面:基本数据类型有哪些?包装类型的常量池技术了解么?
基本数据类型VS包装器类型
这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean。
黑洞代码
2021/01/14
8720
基本数据类型VS包装器类型
Scalaz(25)- Monad: Monad Transformer-叠加Monad效果
中间插播了几篇scalaz数据类型,现在又要回到Monad专题。因为FP的特征就是Monad式编程(Monadic programming),所以必须充分理解认识Monad、熟练掌握Monad运用。
用户1150956
2018/01/05
7960
基本数据类型的包装类
JAVA 并不是纯面向对象的语言。Java 语言是一个面向对象的语言,但是 Java 中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中。例如使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型。为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。包装类均位于 java.lang 包,包装类和基本数据类型的对应关系如下表所示:
帅飞
2019/01/22
7740
点击加载更多

相似问题

对于包含包装类型和类型本身的联合,是否有任何保证?

37

是否有一种方法可以保证NetworkX的分层输出?

55

是否有一种用语句包装类的pythonic方法?

22

是否有一种方法只查找未使用的JSDoc类型定义?

12

是否有一种联合类型约束的方法?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文