我想在do块中实现以下目标:
do
if condition then
n0 <- expr0
else
n0 <- expr0'
n1 <- expr1
n2 <- expr2
return T n0 n1 n2
Run Code Online (Sandbox Code Playgroud)
但是Haskell会给出一个编译错误,除非我这样做:
do
if condition then
n0 <- expr0
n1 <- expr1
n2 <- expr2
return T n0 n1 n2
else
n0 <- expr0'
n1 <- expr1
n2 <- expr2
return T n0 n1 n2
Run Code Online (Sandbox Code Playgroud)
它看起来很冗长,尤其是当有许多共享的绑定表达式时。如何使其更简洁?
实际上,我正在尝试执行以下操作:
do
if isJust maybeVar then
n0 <- f (fromJust maybeVar)
n1 <- expr1
n2 <- expr2
return (T (Just n0) n1 …
Run Code Online (Sandbox Code Playgroud) buildExpressionParser仅处理一元和二进制运算符。它可以处理像这样的三元运算符?:
吗?这里和这里都有一些讨论,但没有一个是结论性的。
如果x'是最大整数,则x'是y的第n个根,使得x ^ n <= y.x,x'和y都是整数.有没有有效的方法来计算这样的第n个根?我知道这通常是由第n个根算法完成的,但这里的难点是一切都是整数,因为我正在使用嵌入式系统.
顺便说一句,我甚至尝试从1到y进行二进制搜索以识别最大x,使得x ^ n <= y,但由于x ^ n容易溢出,尤其是当n很大时,它不起作用.
我想创建一个包含可供用户下载的资源的版本。由于它是一个私人存储库,因此我想在单独的公共存储库中创建该版本。这在 GitHub Actions 中可行吗?
create-release操作中有owner
和repo
参数,但将它们设置为不同的存储库后我不断收到错误:
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.PAT }} # A personal access token
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
owner: foo
repo: another_public_repo
Run Code Online (Sandbox Code Playgroud)
错误:验证失败:{"resource":"Release","code":"custom","field":"tag_name","message":"tag_name 不是有效标签"}, {"resource":" Release","code":"custom","message":"发布的版本必须具有有效的标签"}, {"resource":"Release","code":"invalid","field":"target_commitish" }
我正在尝试为我正在解析的某些源文件生成源映射,并且我想获取每个节点的范围。getSourcePos仅给出节点的起始位置(src:line:column)。如何获得其结束位置?
根据 megaparsec 文档,“自第 8 版以来,一次报告多个解析错误变得更加容易。” 我一直无法找到一个这样做的例子。我找到的唯一一个就是这个。然而,它只展示了如何解析换行符分隔的玩具语言,也没有展示如何将多个错误组合到 ParseErrorBundle 中。这个SO 讨论不是结论性的。
在quickcheck中的许多函数中都会用到size参数。但我很难理解它到底是什么。getSize返回什么?
我有以下类型:
data Color = Red
| Yellow
| Green
| ...
Run Code Online (Sandbox Code Playgroud)
我想要一个将字符串表示映射到特定颜色的函数。
str2Color :: String -> Color
str2Color "Red": Red
str2Color "Yellow": Yellow
str2Color "Green": Green
Run Code Online (Sandbox Code Playgroud)
我可以枚举所有字符串,但问题是所有颜色的列表很长。有没有更简单的方法?
ps:为了便于说明,我们假设所有输入字符串都有相应的颜色。
我正在 Haskell 中实现一个编译器,将源语言编译为目标语言(类似汇编)。
出于调试目的,需要源映射将目标语言汇编指令映射到其相应的源位置(行和列)。
我已经广泛搜索了编译器实现,但没有一个包含源映射。
谁能指出我如何生成源地图的正确方向?
代码示例、书籍等。Haskell 优先,其他语言也欢迎。
newtype Program = Program [Global] [Function]
Run Code Online (Sandbox Code Playgroud)
我正在 Haskell 中使用类 C 语法解析源文件,其中全局变量和函数位于顶层。如果它们必须按顺序出现,例如,在所有全局变量之后的函数,解析起来很简单。但它们可以按任何顺序出现,如下所示。如何处理这样的语法?
全球0
函数0
全球1
功能1
功能2
全球2
似乎可以使用 Parsec.Perm 之类的东西,但是当所有选择返回相同类型(十进制)时,该示例有效,而我的情况则返回Global或Function。
haskell ×8
megaparsec ×3
parsec ×2
algorithm ×1
bind ×1
do-notation ×1
math ×1
monads ×1
nth-root ×1
parsing ×1
quickcheck ×1
source-maps ×1