小编dyi*_*ynx的帖子

haskell-mode中的ghci tab-completion

将ghci通过劣质haskell模式与Emacs集成是非常好的:这为快速导航到编译错误位置,交互式检查类型,定义等提供了很好的可能性.然而,我在此设置中缺少的主要功能是无法使用ghci tab-completion,这对于完成导入的模块,语言扩展和ghci命令可用的功能非常有用.

我假设通过将原始"TAB"字符传递给ghci进程,读取其输出并将结果粘贴到Emacs缓冲区中,可以相当简单地实现此功能.请注意,我没有在Emacs中使用"comint-mode",所以我可能完全错了.

最后,我们提出了一个问题:为什么haskell模式缺少此功能?是否有任何我不知道的明显问题,难以实施,还是仅仅是由于某些历史原因?(比如"没有人费心去写它").你有问题的解决方法吗?(除了在Emacs外面运行ghci)

emacs haskell ghci

17
推荐指数
1
解决办法
2403
查看次数

什么时候只需要PartialEq而不是Eq是合适的?

我正在阅读Rust书籍,并尝试了解PartialEqand Eq特质的用例。

我认识到,PartialEq是关系其不必是反射性(也就是说,可这样xx != x),而且Eq是一个标记性状它说,关系也是自反(现在是一个合适的等价关系)。

这些书提供了一个示例,其中PartialEq还不够,而且Eq还需要:HashMap<K, V>查找。的确,如果将仅实现的数据类型用作键PartialEq(例如浮点数),则在尝试NaN用作键时会遇到麻烦,因为我们无法找到它。

现在,我试图了解查找需要什么功能Eq。如果找到不需要的代码示例,我也许可以更好地理解它Eq

该书说,这样做assert_eq!仅是PartialEq为了使我们能够比较事物是否平等。但是,如果我们编写assert_eq!(f64::NAN, some_code_producing_nan());测试,则测试将始终失败。与在中使用PartialEq键存在相同的基本问题HashMap,但由于某些原因,在此认为它是适当的。

什么是仅需要PartialEq 且添加Eq不理想/ 不合理的合理功能的示例?

如果没有这样的使用情况,那我们为什么关心分裂成两个特点PartialEq/ Eq?以Haskell为例Eq

traits rust

12
推荐指数
1
解决办法
227
查看次数

非多态函数的多态签名:为什么不呢?

举个例子,考虑一下琐碎的功能

f :: (Integral b) => a -> b
f x = 3 :: Int
Run Code Online (Sandbox Code Playgroud)

GHC抱怨它不能推断(b~Int).该定义匹配签名,因为它返回的是Integral(即Int).为什么GHC会强迫我使用更具体的类型签名?

谢谢

polymorphism haskell

6
推荐指数
1
解决办法
204
查看次数

如何放松对已知变体的嵌套匹配的非详尽模式检查?

我如何说服 Rust 编译器内部match表达式在这里没问题,因为外部match已经限制了可能的类型?

enum Op {
    LoadX,
    LoadY,
    Add,
}

fn test(o: Op) {
    match o {
        Op::LoadX | Op::LoadY => {
            // do something common with them for code reuse:
            print!("Loading ");

            // do something specific to each case:
            match o {
                // now I know that `o` can only be LoadX | LoadY,
                // but how to persuade the compiler?
                Op::LoadX => print!("x"), /* LoadX specific */
                Op::LoadY => print!("y"), /* LoadY specific */ …
Run Code Online (Sandbox Code Playgroud)

pattern-matching rust non-exhaustive-patterns

5
推荐指数
1
解决办法
1070
查看次数

在“cfg”宏下使用条件编译模块

我想知道如何在宏下使用条件编译模块cfg!。我正在尝试这个:

pub fn f() { ... }

#[cfg(feature = "x")]
pub mod xmodule {
   pub fn f() { ... }
}

pub fn test() {
  if cfg!(feature = "x") {
    xmodule::f();
  } else {
    f();
  }; 
}
Run Code Online (Sandbox Code Playgroud)

当我使用 编译它时它工作正常cargo check --features x,但如果我不启用该功能,它会失败并出现以下错误:

use of undeclared type or module `xmodule`
Run Code Online (Sandbox Code Playgroud)

我是否做错了什么,或者编译不够智能,无法理解如果未设置该功能则不应使用该模块?

conditional-compilation rust

2
推荐指数
1
解决办法
1317
查看次数