如何在 Haskell 中获取 Maybe 的值

2024-04-05

我对 Haskell 比较陌生,并开始阅读“Real World Haskell”。

我刚刚偶然发现了 Maybe 类型,并且有一个关于如何从 a 接收实际值的问题Just 1例如。

我编写了以下代码:

combine a b c = (eliminate a, eliminate b, eliminate c)
                where eliminate (Just a) = a
                      eliminate Nothing = 0

如果我使用以下方法,效果很好:

combine (Just 1) Nothing (Just 2)

但是,如果我将 1 更改为字符串,则它不起作用。

我想我知道为什么:因为eliminate必须返回一种类型,在本例中是一个Int。但我该如何改变eliminate至少处理字符串(或者可能处理所有类型)?


从标准来看Prelude https://hackage.haskell.org/package/base-4.10.0.0/docs/Prelude.html#v:maybe,

maybe :: b -> (a -> b) -> Maybe a -> b
maybe n _ Nothing = n
maybe _ f (Just x) = f x

给定一个默认值和一个函数,将该函数应用于Maybe或返回默认值。

Your eliminate可以写成maybe 0 id,例如应用恒等函数,或返回 0。

从标准来看Data.Maybe https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Maybe.html#v:fromJust,

fromJust :: Maybe a -> a
fromJust Nothing = error "Maybe.fromJust: Nothing"
fromJust (Just x) = x

这是一个partial函数(不会为每个输入返回一个值,与total函数,确实如此),但在可能的情况下提取值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Haskell 中获取 Maybe 的值 的相关文章

  • 机器和管道(或其他类似的库)之间的概念区别是什么?

    我想学习这个概念 以便我能够理解和使用诸如machines http hackage haskell org package machines 我试着跟随R nar Bjarnason 关于机器的演讲 https dl dropbox co
  • 我什么时候应该将可选值与 nil 进行比较?

    很多时候 您需要编写如下代码 if someOptional nil do something with the unwrapped someOptional e g someFunction someOptional 这似乎有点冗长 而且
  • Accelerate 和 Repa 是否有不同的用例?

    我一直在玩 Repa 和 Accelerate 它们都很有趣 但我不知道何时使用其中一个 何时使用另一个 他们是一起成长 是竞争对手 还是只是为了解决不同的问题 Repa 是一个用于高效数组构建和遍历的库 用 Haskell 编程并在 Ha
  • 使用 cabal new-install 重新安装相同版本的软件包

    我正在开发 Haskell 包 我还没有上传到Hackage 版本号是0 1 0 0 我正在使用新风格的 Cabal 命令 为了在我处理包的同时测试它 使库可用于测试项目 我运行cabal new install lib构建包后 然而 我注
  • Haskell/GHC:使用相同模式匹配多个一元构造函数

    所以我正在尝试定义 TrieSet 数据类型 尽管我知道我不需要 http hackage haskell org package TrieMap module Temp where import Data Map data TrieSet
  • Haskell 中函数和函子有什么区别?只有定义吗?

    在 Haskell 中 当编写函数时 这意味着我们将某个东西 输入 映射到另一个东西 输出 我尝试 LYAH 来理解 Functor 的定义 看起来和普通 Functor 一样 函数被称为函子有什么限制吗 Functor 是否允许有 I O
  • 如何使用 Haskell 中的 thyme 库从 Int 值创建 UTCTime?

    我有年 月 日 小时和分钟值 所有这些都是类型Int 我怎样才能将它们转换为UTCTime or UniversalTime 需要导入以下内容 import Control Lens import Data Thyme Clock impo
  • 将系统命令的结果绑定到 Haskell 中的变量

    如何在 Haskell 中运行系统命令and将其结果 即标准输出 绑定到变量 在伪 Haskell 中 我正在寻找类似以下内容的内容 import System Process main do output lt callCommand e
  • Haskell Cabal 包 - 找不到 Paths_ 模块

    我正在开发一个 Haskell 项目 Happstack 服务器 Blaze HTML 前端作为主要库 我想添加一个静态数据目录 看起来你可以使用 Cabal 使用自动生成的Path
  • Haskell:找不到模块“Data.List.Split”

    我正在尝试在 Haskell 中拆分列表 据我所知 最简单的方法是splitOn 但是这个函数需要Data List Split 所以我尝试运行import Data List Split在前奏曲中 但是 我收到以下错误 Could not
  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 如何为强制长度为 2^n 的向量类型定义可用的 Applicative 实例

    对于某些应用程序 我需要长度为 2 n 的向量 为了强制某些操作的长度匹配 我使用 ist 应用实例定义了我的类型 如下所示 LANGUAGE GADTs DataKinds FlexibleInstances FlexibleContex
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • 如何手动推断表达式的类型

    给定 Haskell 函数 head filter fst 现在的问题是如何手动 手动 找到类型 如果我让 Haskell 告诉我我得到的类型 head filter fst Bool b gt Bool b 但我想了解仅使用所用函数的签名
  • 在 try 中使用零合并运算符? for 抛出并返回可选值的函数

    我想在以下两种情况下使用 nil coalescing 运算符设置默认值 函数抛出错误 函数返回 nil 请看一下下面的代码片段 我有以下问题 为什么 item1 为零 item1和item2的初始化有什么区别 enum VendingMa
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • Haskell:是的,没有类型类。为什么是整数?

    我有一个关于 GHCi 如何假定整数类型的问题 我正在阅读 Learn you a Haskell 是 否类型的课程 如果您想阅读全文 这里有一个链接 http learnyouahaskell com making our own typ
  • Haskell 中列表列表的笛卡尔积

    给定一个长度列表的列表x所有子列表的长度都相同y 输出y x长度列表x包含每个子列表中的一项 例子 x 3 y 2 1 2 3 4 5 6 Output 2 3 8不同的输出 1 3 5 1 4 5 1 3 6 1 4 6 2 3 5 2
  • Haskell 中的中缀运算符优先级

    对于以下 Haskell 表达式 返回 a gt gt f 应该读作 返回a gt gt f or 返回 a gt gt f 这里的相关规则是什么 规则始终是函数应用程序的优先级高于任何运算符 因此 return a gt gt f 被解析
  • 如何在 Haskell 中制作打勾游戏的图案?

    实现有 2 个参数的函数 ticktick 第一个参数是自然数元组 定义游戏场地的行数和列数 第二个列表包含由玩家 x 和玩家 o 轮流玩的坐标给出的井字游戏比赛的记录 打印游戏的实际状态 其中游戏区域将由字符 和 界定 空方块 以及字符

随机推荐

  • 如何为任何 liquibase 格式的 sql 指定 validchecksum?

    我遇到了 liquibase 的问题 因此 我在其中一个变更集中的 sql 命令中犯了一个错误 现在 每当我尝试升级部署时 升级都会由于校验和错误而失败 所以我想做 validCheckSum ANY 解决方法 但遇到了这个不起作用的问题
  • 为浮点类型重载运算符%

    我试图重载运算符 因为你不能在双精度类型上使用模数 float a 5 0 float b 5 0 a a b not allowed 我试图用这种函数重载运算符 template lt gt MyClass MyClass
  • 为什么 Ruby 的 1000 个哈希键和值对的数组总是按特定顺序排列?

    假设有一个包含 1000 个哈希值的数组 其中的对如下 id gt 1 name gt something created at gt 2010 08 18 当我使用循环打印出这 1000 条记录时 按理说 散列的键 值对顺序无法保证 但打
  • 如何从 django 图像字段到 PIL 图像并返回?

    给定 django 图像字段 如何创建 PIL 图像 反之亦然 简单的问题 但很难谷歌 我将使用 django imagekit 的处理器来旋转已存储为模型属性的图像 edit In 41 m image 1 class Out 41 dj
  • Keras RGB 转灰度

    我想要一个关于在 Keras 中将输入 RGB 图像转换为灰度的最佳方法的规范答案 这个答案 https stackoverflow com questions 43033739 how to convert images color sp
  • 此代码中出现 HFValidationError 的原因是什么?如何解决此错误?

    我在 Chaquopy android studio 项目中的 python 代码 import torch as tc from transformers import GPT2Tokenizer GPT2Model def genera
  • Vue 和 Jest 单元测试组件

    我是新来的Vue js 我从单元测试开始Jest 我不知道从哪里开始以及如何开始 我有这段 Vue 代码 我想使用 Jest 进行测试 任何提示或想法我都会非常感激 我读到我应该使用浅安装 from Vue 测试实用程序避免组件测试过程中出
  • CSS 旋转并定位到页面左下角

    我试图将 div 放置在窗口的左下角 以便它始终卡在那里 但它应该包含从下向上阅读的文本 如图所示 pic 1 https i stack imgur com k4PGN jpg 我尝试过这种样式 ms transform rotate 2
  • 解释awk命令

    今天我在网上搜索一个命令来打印模式后的下两行 我遇到了一个我无法理解的 awk 命令 usr xpg4 bin awk PATTERN 2 input 有人可以解释一下吗 See https stackoverflow com a 1791
  • 如何在 echo 调用中运行函数

    这是一个快速但简单的问题 我今天过得很糟糕 不知道该怎么做 我需要做的是这个 我正在检查 url 中的 PMD 如果是这样 请回显
  • 使用curl上传本地目录中的所有文件

    我想上传一个目录中的所有文件 并且我知道如何使用curl上传一个文件 如下所示 curl T local xxx suffix u xxx psw ftp 192 168 1 158 public demon test xxx suffix
  • 有没有一种方法可以编辑符号链接而不先删除它? [复制]

    这个问题在这里已经有答案了 所以我创建了一个符号链接 https en wikipedia org wiki Symbolic link ln s location to link linkname 现在我想更改符号链接链接到的位置 我怎么
  • 如何在打字稿中将 Observable 中存储的值转换为字符串?

    您好 我是 Angular 和 TypeScript 的新手 我需要一个值Observable在字符串的格式中 如何做到这一点 BmxComponent 文件 export class BmxComponent asyncString th
  • 组件加载时如何设置角度垫选择值?

    我使用了有角的材料 角度 材料 7 1 0 mat select box 然后我使用表单控件而不是 ng model 现在的问题是我无法在组件加载时设置值 我需要将第一个值设置为列表中的 mat select box 我尝试过 但我做不到
  • Gradle 不包括 FXML 和图像

    我一直在寻找将 FXML 和图像包含在build gradle以便将它们构建到罐子中 我有看here https stackoverflow com questions 21128652 location is required in ja
  • 比较数据网格中同一行的两个单元格

    使用 C NET 4 5 MS Visual Studio 2012 WPF 你好 刚刚让这段代码终于起作用了 它基本上是通过数据网格进行迭代来进行行的 请注意 他可能会冒犯所有 WPF 奇才 public IEnumerable
  • 如何下载 Telegram 群组的聊天记录?

    我想下载 Telegram 公共群组中发布的聊天记录 所有消息 我怎样才能用Python做到这一点 我在API中找到了这个方法https core telegram org method messages getHistory https
  • 使用 ssh-keygen 创建 JSch 接受的 SSH 私钥 [重复]

    这个问题在这里已经有答案了 不是直接的编程问题 但有某种相关性 JSch Java SSH 库 似乎不允许 macOS 10 14 使用以下命令创建私钥 ssh keygen t rsa b 4096 我应该使用什么命令来创建具有这种格式的
  • 需要一个支持自动布局的可视化java库

    我需要一个用于可视化的 java 图形库 我可以将其合并到我自己的应用程序中 我发现 jgraph 非常适合可视化 但需要明确定位节点 有没有支持自动布局的开源java图形库 任何建议都会对我非常有帮助 有许多软件包可以做到这一点 如果你习
  • 如何在 Haskell 中获取 Maybe 的值

    我对 Haskell 比较陌生 并开始阅读 Real World Haskell 我刚刚偶然发现了 Maybe 类型 并且有一个关于如何从 a 接收实际值的问题Just 1例如 我编写了以下代码 combine a b c eliminat