我在Haskell工作,经常遇到类似以下的代码:
func i j | i == j = i
| otherwise = j
Run Code Online (Sandbox Code Playgroud)
我想使用align-regexp对齐'='字符,但没有elisp技巧.我试过只做"="而没有引号,但这会在每个'='之前插入一个不需要的空格字符.我在这里找到了一个建议的解决方案,但我似乎无法做任何事情.
请帮我写一个函数或硬编码的宏,这将允许我为此设置一个键绑定.
我最近有幸学习了一些Idris,我发现非常方便的一件事是!-notation,它让我缩短了do块中的monadic代码,比如
a' <- a
b' <- b
c' <- c
someFunction a' b' c'
Run Code Online (Sandbox Code Playgroud)
更好的
someFunction !a !b !c
Run Code Online (Sandbox Code Playgroud)
现在,当我在Haskell中编写代码时,我正在寻找类似的东西,但据我所知它不存在(并且爆炸字符显然已经用于严格的模式匹配).有没有办法避免在do块中有一堆琐碎的左箭头?也许是一个扩展,它会添加一个重写规则,或者是什么呢?
当我运行一个提示输入迷你缓冲区的命令时,让文本被所谓的有用消息覆盖是令人讨厌的,例如:
You can run the command 'package-list-packages' with <menu bar> <options> <packages>
Run Code Online (Sandbox Code Playgroud)
有没有办法专门禁用这些菜单栏建议,我从来没用过?如果没有,我如何全局禁用它们?
我试图使用GHC分析工具分析一些Haskell代码.然而,我最感兴趣的成本中心目前由一堆我并不真正关心的初始化代码主导.
我的代码粗略看起来像这样:
main = do
x <- lotsOfInitialization
print $ {-# SCC "myCostCenter" #-} interestingPart x
Run Code Online (Sandbox Code Playgroud)
在我的实际代码中,该lotsOfInitialization
部分占用了大约98%的时间,因此很难以任何粒度看到内部发生的事情interestingPart
.
我认为只在一个地方注释(而不是使用-fprof-auto
)就足够了,但我得到的报告仍显示所有函数调用.
我也尝试过严格的注释x
,但这似乎没有改变任何东西.
有没有办法告诉GHC忽略初始化代码,或只关注我想要的部分?
我正在使用OpenGL 3.2核心配置文件处理SDL2应用程序.编译时,我收到以下警告:
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:5:2:警告:#warning gl.h和gl3.h都包括在内.如果使用已删除的OpenGL功能,编译器将不会调用错误.[-Wcpp]
我必须假设SDL在某处包含gl.h,因为我的唯一包括如下:
#define GL3_PROTOTYPES
#include <OpenGL/gl3.h>
#include <SDL2/SDL.h>
Run Code Online (Sandbox Code Playgroud)
虽然我可以简单地忽略这一点,但是当我意外地使用核心配置文件中没有的枚举值时,它已经导致了一个难以发现的错误.有没有办法阻止gl.h被包括在内?
cabal repl
在库项目中使用时,使用似乎什么都不做,但对可执行项目工作正常.这是我不明白的预期行为吗?
如果我有一个简单的文件
go = putStrLn "test"
Run Code Online (Sandbox Code Playgroud)
并使用cabal init
所有默认值(但选择"库"作为类型),然后运行cabal repl
只生成一些关于配置和预处理库的文本,并且永远不会进入REPL环境.完全相同的步骤,但选择"可执行"作为类型,使我按预期正确进入GHCi.
直接加载到GHCi时,代码工作正常.
我试图弄清楚如何在模块中使用基于AVL树的Agda标准库实现有限集Data.AVL.Sets
.我能够成功地使用?
以下代码作为值.
import Data.AVL.Sets
open import Data.Nat.Properties as ?
open import Relation.Binary using (module StrictTotalOrder)
open Data.AVL.Sets (StrictTotalOrder.isStrictTotalOrder ?.strictTotalOrder)
test = singleton 5
Run Code Online (Sandbox Code Playgroud)
现在我想实现相同的东西,但Data.String
作为价值观.似乎没有相应的Data.String.Properties
模块,但我认为看起来合适的Data.String
出口strictTotalOrder : StrictTotalOrder _ _ _
.
但是,仅根据此假设严格更换模块失败.
import Data.AVL.Sets
open import Data.String as String
open import Relation.Binary using (module StrictTotalOrder)
open Data.AVL.Sets (StrictTotalOrder.isStrictTotalOrder String.strictTotalOrder)
Run Code Online (Sandbox Code Playgroud)
产生错误
.Relation.Binary.List.Pointwise.Rel
(StrictTotalOrder._?_ .Data.Char.strictTotalOrder) (toList x) (toList x?)
!= x .Relation.Binary.Core.Dummy.? x? of type Set
when checking that the expression
StrictTotalOrder.isStrictTotalOrder String.strictTotalOrder …
Run Code Online (Sandbox Code Playgroud) 我的c/c ++项目往往有相当简单的目录结构,分离出src,include,bin等.我也倾向于在最上面的目录中有一个主makefile.当在Emacs中这样工作时,我总是必须发布M-x cd uppermost-dir,以便我的编译快捷方式按预期工作.
有没有办法让当前目录与我启动Emacs的目录相同?也就是说,当我打开文件时,我可以阻止Emacs更改其工作目录吗?
或者,对于典型的工作流程,是否存在一些关键的问题,在Emacs中只有这样的目录层次结构?
是否有一个包(或自由浮动的elisp)周围动态预览匹配和Emacs中正则表达式搜索/替换的效果?我相信一些专门的模式提供这样的东西,但我还没有找到一个通用的解决方案.
我应该注意到我熟悉regexp-builder,但它只预览匹配并要求我在缓冲区之间复制字符串 - 这不是一个完美的解决方案.