let 语句中的 case 语句需要什么缩进?

2023-12-14

在 haskell 中工作,发现奇怪的行为,将其精简为简单的框架

这有效

a :: Bool
a = case True of
    True -> True
    False -> False

但当我尝试时

b :: IO Bool
b = do
    let b' = case True of
        True -> True
        False -> False
    return b'

I get

ghci>:l test.hs
[1 of 1] Compiling Main             ( test.hs, interpreted )

test.hs:16:14: parse error on input ‘->’
Failed, modules loaded: none.

So I try

c :: IO Bool
c = do
    let c' = case True of
            True -> True
            False -> False
    return c'

这有效。

什么?为什么?在这种情况下为什么需要额外的缩进?我找不到任何相关内容,可能是因为这些关键字在日常语言中非常短且常见。是否有一些规范可以解释这种行为?


基本的缩进规则实际上非常简单:

  • 在开始块的关键字之后(where,let,do,case .. of)记下下一个单词开始的列(可能在下一行)
  • 行的缩进与块中的新条目完全相同
  • 缩进多于前一个条目的行
  • 缩进小于该行之前的块的行结束
  • 在嵌套块中,首先将规则应用于最外面的块

棘手的例子:

1 + case x of
      A -> 45  -- note where "A" starts
      B -> 10  -- same indentation: another case branch
       + 2     -- more indented, so it's "10+2"
     + 10      -- less indented, so it's "1+(case ...)+10"

就你而言,

let b' = case True of
    True -> True
    False -> False

我们有两个嵌套块,一个用于let和一个用于case..of. The let块使用的列b'. The case..of块尝试重用同一列,但我们需要首先将规则应用于最外层的块。所以True -> ...该行实际上是一个新条目let堵塞。这会触发解析错误。

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

let 语句中的 case 语句需要什么缩进? 的相关文章

  • Haskell 下划线与显式变量

    我已经学习 Haskell 几个星期了 我有一个关于下划线的使用的问题 作为函数参数 我认为用一个具体的例子来问我的问题会更好 假设我想定义一个函数 根据提供的索引提取列表的元素 是的 我意识到 已经是预先定义的 我可以定义该函数的两种方法
  • 我应该在 Turtle 或 Foldl 包中使用折叠吗?

    我在使用 Turtle 时遇到了一些困难 直到盯着难以理解的错误消息几分钟后才意识到我使用了错误的fold功能 https hackage haskell org package turtle 1 5 8 docs Turtle Shell
  • 搜索重写规则

    有什么办法可以浏览或搜索重写规则吗 当我使用像这样的标志时 ddump rule firings or ddump rule rewrites我只是得到了触发的规则的名称以及它引起的重写 但没有得到实际的规则本身 理想情况下 我想通过 GH
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • “Eta减少”并不总是在Haskell中举行?

    我发现我可以说 LANGUAGE RankNTypes f1 forall b b gt b gt forall c c gt c f1 f id f HLint 告诉我我可以在这里做 Eta 减少 但是 f2 forall b b gt
  • 标准的能力

    我发现了一些使用标准的旧例子here http www serpentine com blog 2009 09 29 criterion a new benchmarking library for haskell 看起来好像早在 2009
  • 如何在 Haskell 中制作打勾游戏的图案?

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

    我正在考虑分割字符串的问题s在一个字符处c 这表示为 break c s 其中 Haskell 库定义break c 足够接近 br br s h t if c h then s else let h t br t in h h t 假设我
  • Traversable 类型类的用途

    有人可以向我解释一下类型类的目的是什么吗Traversable 类型类定义是 class Functor t Foldable t gt Traversable t gt where So Traversable is a Functor
  • Haskell:Data.Numbers.Primes 库在哪里?

    我尝试导入 Data Numbers Primes import Data Numbers Primes 伦哈斯克尔给了我 5 hs 1 8 Could not find module Data Numbers Primes Use v t
  • 你能识别 Haskell 程序中的无限列表吗? [复制]

    这个问题在这里已经有答案了 可能的重复 如何判断列表是否是无限的 https stackoverflow com questions 7371730 how to tell if a list is infinite 在Haskell中 你
  • Haskell 输入返回元组

    我想知道 IO 函数是否可以返回元组 因为我想从这个函数中获取这些元组作为另一个函数的输入 investinput IO gt Char Int investinput do putStrLn Enter Username username
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • 在 RMarkdown 输出到 PDF 时缩进而不添加项目符号点或编号

    之前有人问过如何在没有项目符号的情况下缩进文本 RMarkdown 中的点 但这是针对 HTML 输出的 在 RMarkdown 中缩进而不添加项目符号点或数字 https stackoverflow com questions 47087
  • 我是否需要采取明确的操作来促进与持久数据结构的共享?

    我来自命令式背景 正在尝试实现一个简单的不相交集 并集查找 数据结构 以获得在 Haskell 中创建和修改 持久 数据结构的一些练习 目标是有一个简单的实现 但我也关心效率 我的问题与此相关 首先 我创建了一个按等级并集的不相交集森林实现
  • 关于“没有绑定的类型签名”的错误

    我在 Haskell 中遇到 ASCII 问题 fromEnum Char gt Int toEnum Int gt Char offset Int offset fromEnum A fromEnum a toUpper Char gt
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi

随机推荐

  • 如何访问 subclipse 在运行时使用的 SVNClientAdapter?

    我正在使用 Subclipse API 我想实现 ISVNNotifyListener 以便我可以了解运行时发生的 subclipse 事件 我相信我需要将我的通知侦听器实例添加 订阅 到客户端适配器将通知的侦听器集 但我不知道如何访问 S
  • 我无法初始化 Google Play 游戏服务

    项目只有这段代码 我只是遵循这个描述 访问https developers google com games services android init 创建项目并添加库 google play services lib 和 BaseGam
  • 使用 Xamarin.Android 将文件上传到谷歌驱动器文件夹

    我想使用 Xamarin Andriod 在 google 驱动器 不是默认位置 的特定文件夹内创建文件 我正在使用下面的代码 MetadataChangeSet changeSetfile new MetadataChangeSet Bu
  • 在 Mac OS X 雪豹上运行 mono 2.10.2 mkbundle 时出现问题

    这一页有关于捆绑包的信息mkbundle 但是当我尝试在 Mac 上使用它时 收到此错误消息 delegate gt mkbundle delegate exe o delegate OS is Darwin Sources 1 Auto
  • Java 小程序下载文件

    我正在尝试构建一个 java 小程序 它将文件下载到客户端计算机 作为一个java应用程序 这段代码工作得很好 但是当我尝试作为一个小程序时 它什么也没做 我已签署 jar 文件 但没有收到任何安全错误消息 代码是 import java
  • 如何判断特定字体是否具有 >64k 的特定字形

    当代码点适合 64 位值时 确定特定 Unicode 字体是否包含该代码点的字形相对容易 if CTFontGetGlyphsForCharacters ctFont chars glyphs 1 It exists 但 CTFontGet
  • android 数据绑定无法正常工作

    我想帮助解决问题 首先 按照我的代码的详细信息 build gradle Project android buildscript repositories jcenter mavenCentral maven url home melti
  • EF 4 Code First - 组合视图和表

    我研究这个问题好几天了 似乎找不到一个让我感觉良好的选择 但是 这里有一个非常相似的问题的链接 将计算字段添加到模型 最后 我也有同样的问题 但希望有更好的解决方案 考虑以下数据库表 CREATE TABLE Contact Contact
  • 函数将十六进制字符串转换为 BitArray C#

    我创建了以下函数 它将按要求执行 将十六进制字符串转换为 BitArray 我不确定该函数的效率 但我现在的主要问题是转换为Int64函数是特定字节序 当将其移植到替代芯片组时 我们将得到不同的结果 或例外 那么有人能想到另一种方法来进行这
  • 如何使用 Wi-Fi 获取距离

    我想使用 wi fi 查找距离并在 iPhone 的地图上绘制标记 那么我能得到什么想法或代码吗 第一次阅读您的问题时 我假设您指的是到接入点的距离 在写了一堆关于这个的内容之后 我意识到你可能有别的意思 如果这就是您的意思 请继续阅读 鉴
  • Facebook如何重写浏览器地址栏中页面的源URL?

    Go to http www facebook com facebook v wall 然后单击信息选项卡 内容将被加载 地址栏现在变成http www facebook com facebook v info但网页没有重新加载 起初我以为
  • 在 Nuxt 中使用最新的 SASS 和 @use

    我想在我的项目中使用 sass 我安装了 node sass 和 sass loader 我可以使用导入 变量和其他 sass 的未来 但我不能使用 use 来使用 mixin 或 function dependencies babel c
  • 如何在python中使用networkx绘制有向图?

    我有一些来自脚本的节点 我想将它们映射到图表上 在下面 我想使用箭头从 A 到 D 并且可能也将边缘着色 红色或其他颜色 这基本上就像所有其他节点都存在时从 A 到 D 的路径一样 您可以将每个节点想象为城市 从 A 到 D 需要方向 带有
  • Laravel - 如何更新整个集合

    我正在尝试用 laravel 制作一个通知系统 我的想法是获取数据并立即更新 is delivered 标志 这是代码 Model public function scopeGetForView query query gt orderBy
  • 关于数组中缺少元素的问题

    我在麻省理工大学的 算法介绍第二版 一书中遇到以下问题 问题如下 数组 A 1 n 包含 0 到 n 之间除 1 之外的所有整数 这很容易 使用辅助数组 B 0 来在 O n 时间内确定丢失的整数 记录 A 中出现了哪些数字 但是 在这个问
  • 如何使用 django 删除图像?

    我想知道如何在表单中添加删除按钮来删除图像 该项目是一个简单的 图片查看器 索引显示存储的所有图像 但我想添加一个 x 图标来删除该特定图像 这是我的代码 views py from django shortcuts import rend
  • jTDS 错误地报告结果集元数据中的数据类型信息(对于 DATE 列,报告 NVARCHAR)

    目前 针对 Microsoft SQL Server 2008 的 jTDS JDBC 驱动程序 1 2 5 似乎错误地将 DATE 列的数据类型报告为 NVARCHAR 对于早期版本的 jTDS 和 SQL Server 2005 200
  • pytorch 中的 reshape 和 view 有什么区别?

    在 numpy 中 我们使用ndarray reshape 用于重塑数组 我注意到在 pytorch 中 人们使用torch view 出于同样的目的 但同时 还有一个torch reshape 现存的 所以我想知道它们之间有什么区别以及何
  • 在 JavaScript 中返回 !1

    我刚刚在 JavaScript 中遇到了一个函数 它有return 1 这实际上意味着什么 你为什么要return 1 or return 0 这是我遇到的函数 function convertStringToBoolean a typeo
  • let 语句中的 case 语句需要什么缩进?

    在 haskell 中工作 发现奇怪的行为 将其精简为简单的框架 这有效 a Bool a case True of True gt True False gt False 但当我尝试时 b IO Bool b do let b case