Haskell 中的类型比较

2023-12-08

我还在学习 Haskell 的基础知识,我试图找到这个简单问题的答案,所以我提前道歉,因为我确信它很简单。

Given:

data Fruit = Fruit| Apple | Orange
    deriving (Show, Eq)

a = Apple

如何检查某个 a 是否是水果?


假设你真的想说type比较起来,简单的答案是“你不能”。 Haskell 是静态类型的,因此检查是在编译时完成的,而不是运行时。所以,如果你有这样的函数:

foo :: Fruit -> Bool
foo Apple = True
foo x     = False

是否的答案x是一个水果永远是“是”。

您可能想要做的是找出给定值是用什么数据构造函数构造的。为此,请使用模式匹配:

fruitName :: Fruit -> String
fruitName Fruit  = "Fruit"
fruitName Apple  = "Apple"
fruitName Orange = "Orange"

顺便说一句,如果您正在使用 GHCi,并且您想知道某物的类型,请使用:t

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

Haskell 中的类型比较 的相关文章

  • 模式匹配需要圆括号来表示非空列表而不是方括号

    在 Haskell 中 为什么模式匹配期望列表在不为空时有圆括号而不是方括号 当它尝试与空列表 方括号 进行模式匹配时 为什么它不遵循相同的约定 圆括号不应该专门为元组保留吗 例如 下面不起作用 third Integral a gt a
  • 测试列表是否已排序

    在 haskell 中找到最小列表确实很容易 foldl1 min 9 5 7 3 7 4 6 10 给我3 我更换了min with lt 测试列表是否已排序 foldl1 lt 9 5 7 3 7 4 6 10 我收到此错误消息 No
  • 在 Haskell 中,如何将嵌套上下文中的函数“应用”到上下文中的值?

    nestedApply Applicative f Applicative g gt g f a gt b gt f a gt g f b 正如类型所示 如何获得 a gt b 应用于那个a在上下文中f 感谢帮助 这是关注类型很有帮助的情况
  • 在 Haskell 中对单位的组成(例如英寸、美元等)进行建模

    跟进自我之前的一个问题 https stackoverflow com q 73375273 222529 我问如何创建一个可以对单元进行建模的类型 例如Inch 作为 Haskell 中的一种类型 我现在面临的问题是如何对该单元和其他单元
  • Haskell:处理死锁的自引用列表

    GHC 允许永久阻止以下内容是否有任何有用的理由 list 1 tail list 看起来列表迭代器 生成器有点复杂 我们应该能够做一些更有用的事情 Return error Infinitely blocking list Return
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • Haskell,范围缩小到无步骤[重复]

    这个问题在这里已经有答案了 为什么在 Haskell 中工作范围不能降低到没有步骤 7 1 gt 但只工作这个 7 6 1 gt 7 6 5 4 3 2 1 Haskell 无法知道您想要执行 1 除非您给出提示 在某些情况下 您可能需要一
  • Haskell 中的常量变量声明

    要声明常量变量 我可以在 Ruby 中执行以下操作 class COLOR RED 10 BLUE 20 GREEM 30 end COLOR RED回报10 COLOR BLUE回报20 等等 我如何在 Haskell 中实现这一点 我想
  • 'lens' 的阴谋集团依赖性解析失败

    我刚刚做了一个阴谋更新并尝试从 hackage 安装 lens 这给了我以下错误 cabal install j lens Resolving dependencies Configuring dlist 0 7 0 1
  • 谁能解释一下 GHC 对 IO 的定义吗?

    标题非常自我描述 但有一个部分引起了我的注意 newtype IO a IO State RealWorld gt State RealWorld a 剥离newtype 我们得到 State RealWorld gt State Real
  • 计算两点之间的距离(Haskell)

    给定两个元组的输入 我希望能够使用以下公式计算两点之间的距离 距离 sqrt x1 x2 2 y1 y2 2 所以我希望函数调用和输出如下所示 gt distance 5 10 3 5 5 385 当我尝试运行下面的代码时 它告诉我输入 w
  • 将 Either 列表转换为其中包含列表的 Either 列表

    我是 Haskell 的初学者 我正在编写一些使用 Haskell 的代码Either https hackage haskell org package base 4 9 0 0 docs Data Either html用于错误处理 E
  • 在 haskell 中处理 IO 与纯代码

    我正在编写一个shell脚本 我在haskell中的第一个非示例 它应该列出一个目录 获取每个文件大小 进行一些字符串操作 纯代码 然后重命名一些文件 我不确定我做错了什么 所以有两个问题 我应该如何安排这样的程序中的代码 我有一个具体问题
  • 在 Haskell 命令行应用程序中提示输入密码

    以下 Haskell 程序提示用户在终端中输入密码 如果输入正确则继续 main do putStrLn Password password lt getLine case hash password member database of
  • 解析 PHOAS 表达式

    我想我理解 PHOAS 参数化高阶抽象语法 我明白了如何漂亮地打印一个表达式 参见http www reddit com r haskell comments 1mo59h phoas for free by edward kmett cc
  • 嵌套在其他 monad 中的 IO 操作未执行

    我有一个 foobar IO ParseResult String String ParseResult 是一个在这里定义的 monad https hackage haskell org package haskell src exts
  • Haskell 排列库函数 - 请澄清一下?

    这是代码permutationsHaskell 中的函数Data List module permutations a gt a permutations xs0 xs0 perms xs0 where perms perms t ts i
  • 如何避免编写这种类型的 Haskell 样板代码

    我经常遇到这种情况 这很烦人 假设我有一个 sum 类型 它可以保存一个实例x或一堆其他无关的事情x data Foo x X x Y Int Z String other constructors not involving x 要声明
  • 将名称绑定到值与将值分配给变量

    阅读 Bartosz Milewski 的文章完整的 https www fpcomplete com school starting with haskell basics of haskell 3 pure functions lazi
  • Haskell 类型定义,=> 等

    我正在使用 Learn You a Haskell 来学习 Haskell 第 54 页上有一个 像这样执行 take Num i Ord i gt i gt a gt a take n n lt 0 take take n x xs x

随机推荐

  • 检查 PHP 多维数组中是否存在数组值

    我有以下多维数组 Array 0 gt Array id gt 1 name gt Jonah points gt 27 1 gt Array id gt 2 name gt Mark points gt 34 我目前正在使用foreach
  • 在 C++ 中使用 getline 忽略空格[重复]

    这个问题在这里已经有答案了 嘿 我正在尝试编写一个程序 该程序将接受人们的新任务 将其添加到堆栈中 能够显示任务 能够将该堆栈保存到文本文件中 然后读取文本文件 当我尝试接受用户的输入时 问题就出现了 每当您输入带有空格的字符串时 选择要执
  • 创建自定义 tomcat 会话管理器而不将 jar 放入 CATALINA_HOME 目录?

    我正在为 Tomcat 开发一个自定义会话管理器 并且我让它工作时有一个警告 我必须将 jar 以及所有相关的 jar 放在 CATALINA HOME lib 目录中 否则我会得到一个 noclassdef 发现异常 即使类位于 WEB
  • PHPExcel 创建“不可读的内容”

    我尝试了大约 1000 种不同的方法来解决这个问题 如果其他人能够发现问题 我们将不胜感激 我有使用 PHPExcel 的代码 可以生成多个 Excel 工作表并将它们保存到磁盘 使用 MS Excel 2010 打开第二个文件及以后的所有
  • Images.xcassets 为 iPhone 6 拍摄了错误的图像?

    我已经为 2x Retina 4 和 3x 设置了三个图像 当我运行该应用程序时 我得到以下结果 iPhone 4s 推特图像 iPhone 5 谷歌图片 iPhone 6 脸书图片 iPhone 6 推特图像 一切都很好 但是当我跑在iP
  • 使用 JMESPATH 获取对象上的 JSON 元素的查询

    当我有一个简单的 JSON 时 例如 name Tom age 20 是否有任何 JMESPath 查询可以获取age只有当name is Tom 查询应该得到20与上面的 JSON 一起 但是 如果名字不是Tom like name Bo
  • 为什么在平移和更改相机角度时我的有线球体会变成椭球体?

    我需要沿 z 轴来回平移有线球体 同时更改相机角度 每当我的球体被平移时 它就会慢慢变成椭球体 我实在不明白为什么 在这里您可以看到我认为有错误的代码片段 此外 调整窗口大小时不应更改形状 而只能更改其大小 void init glClea
  • Android 中的全文搜索示例

    我很难理解如何在 Android 上使用全文搜索 FTS 我读过有关 FTS3 和 FTS4 扩展的 SQLite 文档 而且我知道在Android上可以做到 然而 我很难找到任何我能理解的例子 基本数据库模型 一个 SQLite 数据库表
  • iPhone 亮度私有 API 无法正常工作

    我正在尝试设置背光的亮度 但它的表现非常奇怪 我正在使用私有 API id UIApplication共享应用 setBacklightLevel 1 0f 然而 当我调用此命令时 屏幕变暗 并没有像我想象的那样变得 100 亮 我用各种数
  • 匹配除电子邮件地址之外的所有内容的正则表达式

    假设这是输入 这是一个段落 这是一个段落 这是一个段落 这是一个段落 这是一个段落 这是一个段落 这是一个电子邮件地址 电子邮件受保护 我想要一个匹配除电子邮件地址之外的所有内容的正则表达式 我努力了 这会匹配除电子邮件所在的 LINE 之
  • 是否有缺少固定宽度类型 (intXX_t) 的平台?

    C 11 具有固定宽度 2 的补码类型 u int8 t u int16 t etc 然而 这些类型是可选的 有时我需要使用这些类型 因此我的代码可能不太可移植 有没有什么平台 提供 C 11 编译器 目前 哪些类型不存在 是否有任何 通用
  • Android 长按滚动

    我想将长按与滚动 连接 这样用户就不必释放屏幕并开始滚动 我已经实现了手势检测器 final GestureDetector gestureDetector new GestureDetector new GestureDetector S
  • 未找到 Apple-app-site-association

    我正在尝试通过Apple 搜索验证工具 并且我在使用 apple app site association 时遇到问题 由于某种原因 机器人找不到我的文件 但如果你打开 URL 它就在那里 这不是格式问题 因为甚至找不到该文件 我有 htt
  • 将 JSON 驼峰式大小写转换为蛇形大小写(反之亦然)并将数值字符串化

    我必须向 Web REST 服务发送和接收 JSON 对象 这些对象由 DLL 生成 该 DLL 将属性名称序列化为大驼峰式命名法 PropertyName 而 Web 服务需要蛇形命名法 property name 另外 DLL 将数值序
  • GMaps JS 地理编码:通过异步地理编码功能使用/传递变量?

    我有一个位置对象的数组列表 我正在使用其中一些来构建完整的地址 然后对其进行地理编码 一旦我收到 OK 状态 我就会在地图上放置一个标记 这一切都很好 但是 现在我还想在每个标记上放置一个信息窗口 其中包含数组列表中的另一个属性 Locat
  • iPhone:向滚动视图添加按钮使按钮无法交互

    由于某种原因 在我的 viewController 的 addBook 方法中初始化的按钮不会响应触摸 我分配给它的选择器永远不会触发 点击图像时也不会出现 UIControlStateHighlighted 图像 在触摸到达 UIButt
  • 检查函数是否被作为 goroutine 调用

    有什么办法可以知道正在运行的函数是否被调用为 goroutine 吗 我读过 gotour 并且对使用 golang 构建 websocket 服务器感兴趣 所以我找到了这个教程https tutorialedge net golang g
  • 在 ASP.NET MVC 中以编程方式验证模型列表

    我想以编程方式一一验证模型列表 I tried 尝试验证模型但看起来它聚合了验证错误 因此当我迭代 10 个模型的列表时 如果第 5 个模型无效 则对于模型 6 10 TryValidateModel 返回false 您可以使用控制器方法V
  • 修改编辑距离以实现位置偏差

    我使用 Levenshtein 距离算法将作为用户输入提供的公司名称与已知公司名称的数据库进行比较 以找到最接近的匹配 就其本身而言 该算法工作正常 但我想构建一个偏差 以便如果字符串的初始部分匹配 则编辑距离被认为较低 例如 如果搜索条件
  • Haskell 中的类型比较

    我还在学习 Haskell 的基础知识 我试图找到这个简单问题的答案 所以我提前道歉 因为我确信它很简单 Given data Fruit Fruit Apple Orange deriving Show Eq a Apple 如何检查某个