为什么我的 Haskell 断言只发生在 IHaskell 中?

2024-06-21

如果我定义

import Control.Exception (assert)
import Data.Char (ord)

f :: String -> String
f s = assert (all (`elem` letters) s) $ (letters!!) <$> (ix <$> s)
    where
        ix ch = (ord ch - ord 'A')
        letters = ['A'..'Z']

那么如果我执行

f "AB.CD"

在 IHaskell 中,我得到

:10:7-12: Assertion failed

正如我所期望的。但在所有其他设置中,该断言似乎被忽略。例如在 GHCi (7.10.2) 中我得到

ghci>f "AB.CD"
"AB*** Exception: Prelude.!!: negative index 

如果我将表达式放入程序中

main :: IO ()
main = do
    print $ f "AB.CD"

I get

prgm: Prelude.!!: negative index
"AB

为什么除了 IHaskell 之外,我的断言在其他地方都被忽略了?


在 GHCi 中,:set gives:

options currently set: none.
base language is: Haskell2010
with the following modifiers:
  -XNoDatatypeContexts
  -XNondecreasingIndentation
GHCi-specific dynamic flag settings:
other dynamic, non-language, flag settings:
  -fimplicit-import-qualified
warning settings:

None

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

为什么我的 Haskell 断言只发生在 IHaskell 中? 的相关文章

  • 有没有办法在 Emacs 中使用 Djinn 自动生成 Haskell 代码?

    标题几乎说明了一切 我正在寻找这样的东西 f Int gt Bool gt Int f body Djinn 可以使用定理证明来通过证明该类型存在来生成此类函数的代码 我想知道 是否有现有的方法可以从 Emacs 中获取此功能 因此 我不需
  • 什么是阴谋地狱?

    在阅读有关 阴谋地狱 的内容时 我有点困惑 因为这个词的含义太多了 我猜最初 Cabal Hell 指的是钻石依赖问题 该问题是通过限制构建计划在每个构建计划中只有任何包的单个版本来解决的 一个包的两个不同版本不能存在于单个构建计划中 正如
  • 如何避免编写这种类型的 Haskell 样板代码

    我经常遇到这种情况 这很烦人 假设我有一个 sum 类型 它可以保存一个实例x或一堆其他无关的事情x data Foo x X x Y Int Z String other constructors not involving x 要声明
  • 为什么以下内容会并行运行而不是顺序运行?

    给定以下函数evalPair parPair and deepSeq分别 evalPair Strategy a gt Strategy b gt Strategy a b evalPair sa sb a b do a lt sa a b
  • 没有由文字“1”产生的 Num String 实例

    main do putStrLn myLast 1 2 3 4 myLast a gt a myLast x x myLast xs myLast xs 当我尝试运行此代码时 我收到此消息 没有由文字 1 产生的 Num String 实例
  • 如何处理或避免BlockedIndefinitelyOnSTM异常?

    我花了很多时间来解决我正在处理的应用程序中遇到的问题 该应用程序是一个 Web 应用程序 使用 scotty 公开 REST 端点 它使用一个TVar保持其更新的状态STM a由前端层触发的动作 由于该应用程序基于事件溯源原则 因此业务层生
  • 在一元上下文中使用 Data.Map

    我正在操作的地图具有单子键 类型为IO Double 我需要使用findMax在这张地图上 我可以用吗liftM为了这 Map findMax Map fromList f x X f y Y f z Z Here f x有类型IO Dou
  • 为什么我的 Haskell 断言只发生在 IHaskell 中?

    如果我定义 import Control Exception assert import Data Char ord f String gt String f s assert all elem letters s letters lt g
  • `arr fst` 是如何自然变换的?

    I asked 这个问题 https stackoverflow com q 62733726 11143763不久以前 这是关于以下箭头定律 arr fst first f f arr fst Category k gt k b c gt
  • 加快 GHC 中的编译速度

    除了 O0 这可以加快编译时间吗 如果生成的程序未被优化也没关系 实际上我只想经常快速地对大型 haskell 包进行类型检查 Flag fno code极大地加快了编译速度 但无法使用它 因为该程序使用了 TemplateHaskell
  • 如何在 Haskell 中创建异构列表? (最初是Java)

    如何将以下 Java 实现转换为 Haskell 这里的主要目的是拥有一个包含作为特定接口的子类型的各种元素的列表 我尝试制作下面的 Haskell 版本 但未能达到我的目的 这里的重点是xs有类型 Bar 而不是Foo a gt a 这是
  • 对参数进行排序以利用柯里化

    我最近两次重构代码以更改参数的顺序 因为代码太多 黑客喜欢flip or x gt foo bar x 42正在发生 在设计函数签名时 哪些原则可以帮助我充分利用柯里化 对于轻松支持柯里化和部分应用的语言 有一系列令人信服的论点 最初来自
  • 如何在 constexpr 函数中执行运行时断言?

    据我了解 constexpr 函数可以在编译时和运行时执行 具体取决于整个评估是否可以在编译时完成 但是 您不能重载此函数以具有运行时和编译时对应项 所以我的问题是 如何放入运行时断言以确保运行时函数的执行与我的 static assert
  • Haskell 中存在量化值的列表

    我想知道为什么这段代码不进行类型检查 LANGUAGE ScopedTypeVariables Rank2Types RankNTypes OPTIONS fglasgow exts module Main where foo forall
  • 数据记录的类约束

    我有一个data type data BuildException a KillBuild JobID a Stage FailBuild JobID a Stage CancelBuild JobID a Stage StopBuild
  • 如何在 firebug 中导致调试中断

    我试图在检测到错误时让萤火虫中断 具体来说 我在代码中进行了一些内部检查 例如断言 我希望 Firebug 在失败时停止 我尝试了几种不同的方法 并想知道其他人是怎么做的 以下是我尝试过的方法 输入一些无效代码 以便如果出现错误 函数断言
  • Haskell 中的纯函数是否有可能改变变量的本地副本?

    Haskell 中的纯函数是否有可能改变变量的本地副本 就像 clojure 中提到的那样函数式编程是一个骗局 http swannodette github io 2013 06 10 porting notchs minecraft d
  • 当您包含导入 Gloss 的项目时,“stack ghci”会失败

    如果您在 Stack 项目中导入 Gloss 并使用stack ghci 您会收到以下错误 GHCi version 7 10 2 http www haskell org ghc for help
  • ghci 中严格求和/严格折叠导致内存爆炸

    正如中提到的为什么 sum takeWhile 以下是not炸毁记忆ghci https stackoverflow com questions 14298930 why does sum takewhile 10000000 1 use
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr

随机推荐

  • 访问WCF服务时触发MaxClockSkew

    我有一项 WCF 服务 其一个端点的 MaxClockSkew 配置设置为 23 59 59 但没有安全行为 另一个端点具有相同的 MaxClockSkew 配置和安全配置 问题是当访问非安全端点时不会引发异常 而当访问安全端点时会引发安全
  • 如何重命名现有的 Hybris 扩展

    我正在开发 Hybris 并使用 hybris 命令 ant extgen 和默认设置生成了一个新的扩展 在扩展生成过程中 我没有更改默认值 就像我让项目名称为 training 一样 我开始开发一些代码只是为了尝试 但现在我编写了相当多的
  • C++成员函数的多个非静态回调

    我发现使用下面链接的答案中的代码效果很好 但在我的用例中存在问题 它有效地为非静态成员函数创建一个 静态包装器 以作为回调传递 include
  • NullPointerException org.chromium.android_webview.AwContents$AwViewMethodsImpl.onDragEvent

    大约 10 天前 我的应用程序开始记录此异常 在开发控制台上看到 java lang NullPointerException at org chromium android webview AwContents AwViewMethods
  • 如何在文件中搜索多行模式?

    我需要找到包含特定字符串模式的所有文件 我想到的第一个解决方案是使用find管道与xargs grep find iname py xargs grep e YOUR PATTERN 但是 如果我需要查找跨越多行的模式 我就会陷入困境 因为
  • AbstractCollection 的 toArray 方法的实现中的代码有什么用

    public Object toArray Estimate size of array be prepared to see more or fewer elements Object r new Object size Iterator
  • 将 ArrayList 保存在捆绑包 savingInstanceState 中

    ArrayList 是在类级别定义的 这些是我保存的实例方法 Override protected void onSaveInstanceState Bundle outState super onSaveInstanceState out
  • 添加 Imap 文件夹 Mailkit

    我尝试使用 Mailkit 添加顶级文件夹 因此当我添加以下标签时 我可以将它们分组到该文件夹 下 标签是 邮件包 档案 邮件包 标记 我想创建一个名为 mailkit 的文件夹 以便 gmail 将它们分组 但目前我似乎无法找到执行此操作
  • Python Nose 导入错误

    我似乎无法理解鼻子测试框架 https nose readthedocs org en latest 识别文件结构中测试脚本下方的模块 我已经设置了演示该问题的最简单的示例 下面我会解释一下 这是包文件结构 init py foo py t
  • 检查对象的每个属性是否为空

    我的课程具有多个属性 public class Employee public string TYPE get set public int SOURCE ID get set public string FIRST NAME get se
  • 如何在Firebase Android应用程序中分离两个不同的用户?

    我有一个应用程序 有两种不同类型的用户 一种是教师 第二种是普通用户 如果普通会员登录 他会去normal memberActivity如果他是教师会员 他会去Teacher memberActivity 我如何在登录活动中执行此操作 我的
  • Objective-C 属性和内存管理

    给出以下属性定义 property nonatomic retain MyObject foo 以下代码是否会导致内存泄漏 self foo MyObject alloc init 看起来 alloc 调用将对象上的保留计数增加到 1 然后
  • Android Studio——清除Instrumentation Test的应用程序数据

    如何让 Android Studio AndroidJunitRunner 在仪器测试之前清除应用程序数据而无需手动运行adb命令 我发现android support test runner AndroidJUnitRunner有点作弊
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • 友元模板特化声明中不允许使用 Constexpr 吗?

    我正在移植 C 14 constexpr代码库从 Clang 到最新的 g 5 1 考虑以下本土开发的简化代码片段bitset自 Clang 3 3 的太平岁月以来 现在已经快 2 年了 该类就一直可以正确编译 include
  • Windows 每秒进行一次线程切换的频率是多少? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions Windows 通常 每秒进行一次线
  • 如何将图片存储在图像列中?

    我有一个用户表 Name varchar 20 Picture image 我想将图像存储到 Picture 列中 如何使用 SQL 脚本实现此目的 以下是将图像存储到 sql server 的示例代码 SqlConnection conn
  • WCF 服务 - 启动需要额外时间

    我发现 WCF 服务将需要 8 10 秒来加载第一个命中 之后将需要不到一秒钟的时间 有什么想法吗 可能是由于 NET 的冷启动 您是否考虑过设置IIS 预热模块它在初始请求之前初始化依赖项 来自学习IIS网站 http learn iis
  • 使用 HTTP NSURL 创建 AVAsset

    我正在尝试合并两个NSURLs包含视频参考 其中一个 URL 指向 AWS 上的视频 另一个 URL 指向本地存储的视频 我的导出代码有效 因为我已经尝试使用两个本地视频 但每当我尝试合并 HTTP url 和本地 url 时 我都会收到此
  • 为什么我的 Haskell 断言只发生在 IHaskell 中?

    如果我定义 import Control Exception assert import Data Char ord f String gt String f s assert all elem letters s letters lt g