小编lef*_*out的帖子

"你不明白欣德利 - 米尔纳的哪一部分?"

发誓曾经有一件T恤出售,上面写着不朽的话:


什么部分

辛德米尔纳

明白吗?


就我而言,答案就是......全部!

特别是,我经常在Haskell论文中看到这样的符号,但我不知道它的含义是什么.我不知道它应该是什么样的数学分支.

我当然认识到希腊字母的字母,以及诸如"∉"之类的符号(通常意味着某些东西不是一组的元素).

另一方面,我以前从未见过"⊢"(维基百科称它可能意味着"分区").我也不熟悉这里使用的vinculum.(通常它表示一个级分,但是这并不出现在这里是这种情况.)

如果有人至少可以告诉我从哪里开始想要理解这个符号海洋的含义,那将会有所帮助.

haskell functional-programming lambda-calculus hindley-milner denotational-semantics

832
推荐指数
6
解决办法
9万
查看次数

克隆远程Git仓库时找不到git-upload-pack:命令

我一直在使用git来保持我的项目的两个副本同步,一个是我的本地盒子,另一个是测试服务器.这是当我使用ssh登录到远程开发服务器时发生的问题;

git clone me@me.mydevbox.com:/home/chris/myproject
Initialized empty Git repository in /tmp/myproject/.git/
Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
fetch-pack from 'me@me.mydevbox.com:/home/chris/myproject' failed.
Run Code Online (Sandbox Code Playgroud)

(文件名已被更改以保护有罪......!)

两个盒子都运行Solaris 10 AMD.我已经做了一些挖掘,如果我添加--upload-pack=$(which git-upload-pack)命令工作,(并证明它$PATH包含根据RTFM解决方案'git-upload-pack'的路径)但这真的很烦人,加上'git push'不起作用,因为我认为没有--unpack=选择.

顺便说一下,所有的git命令都可以在我的本地方框中正常工作,它与安装在同一个NFS挂载上的软件(1.5.4.2)版本相同/usr/local/bin.

有人可以帮忙吗?

unix git ssh version-control

169
推荐指数
8
解决办法
12万
查看次数

是否存在"普通约束"或"对象类"的任何标准实现?

我想要的

class Trivial t
instance Trivial t
Run Code Online (Sandbox Code Playgroud)

这在Haskell 98中当然没用,因为你可以省略约束; 但ConstraintKinds我们可以明确要求种类的论点* -> Constraint.理想情况下,我想将其定义为"匿名类型级函数" \type a -> (),但这显然是不可能的.

我应该怎么做,使用预定义的东西或者只在我需要的地方定义该类(因为实例是通用的,没有人需要访问它,看起来也很好)?

haskell typeclass constraint-kinds

29
推荐指数
1
解决办法
513
查看次数

结构化绑定是否与std :: vector一起使用?

是否可以使用带向量的结构化绑定?

例如

std::vector<int> vec{1, 2, 3};
auto [a, b, c] = vec;
Run Code Online (Sandbox Code Playgroud)

不幸的是,上面的代码不起作用(在GCC下),但也许有一种不同的方式(结构化绑定)允许将向量的前三个值分配给三个变量.

c++ vector pattern-matching c++17 structured-bindings

24
推荐指数
3
解决办法
2190
查看次数

在多个return语句的情况下,返回`std :: move`是否合理?

我知道回归通常不是一个好主意std::move,即

bigObject foo() { bigObject result; /*...*/ return std::move(result); }
Run Code Online (Sandbox Code Playgroud)

而不是简单的

bigObject foo() { bigObject result; /*...*/ return result; }
Run Code Online (Sandbox Code Playgroud)

因为它妨碍了返回值优化.但是在具有多个不同回报的函数的情况下,特别是类似的东西

class bar {
  bigObject fixed_ret;
  bool use_fixed_ret;
  void prepare_object(bigObject&);
 public:
  bigObject foo() {
    if(use_fixed_ret)
      return fixed_ret;
     else{
      bigObject result;
      prepare_object(result);
      return result;
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

我认为在这样的函数中,正常的返回值优化是不可能的,所以投入是一个好主意

      return std::move(result);
Run Code Online (Sandbox Code Playgroud)

在这里,或者我应该做什么(IMO丑陋,但这是有争议的)

  bigObject foo() {
    bigObject result;
    if(use_fixed_ret)
      result = fixed_ret;
     else{
      prepare_object(result);
    }
    return result;
  }
Run Code Online (Sandbox Code Playgroud)

c++ move-semantics return-value-optimization c++11

22
推荐指数
1
解决办法
6569
查看次数

有没有一种简单的方法可以在通过cabal repl调用时将额外的包加载到ghci?

cabal repl对于调试库非常有用,但是ghci将隐藏所有不属于cabal包的包.虽然这肯定是一件好事cabal build,因为repl它意味着我无法从不相关的软件包中加载某些内容以进行快速测试.

可以通过发布访问任何包:set -package,但是这将从我正在处理的pacakge中卸载所有模块,从而击败了cabal repl.

简单地加载我已安装的软件包,但不希望作为我的库的依赖项,这是一个很好的方法吗?

haskell cabal ghc-pkg

22
推荐指数
2
解决办法
5293
查看次数

是否存在逆变单子?

函数可以是协变的和逆变的.这种协变/逆变二元性也可以应用于monad吗?

就像是:

class Monad m where
  return :: a -> m a
  (>>=) :: m a -> (a -> m b) -> m b    

class ContraMonad m where
  return :: a -> m a
  contrabind :: m a -> (b -> m a) -> m b
Run Code Online (Sandbox Code Playgroud)

请问ContraMonad类有意义吗?任何例子?

monads haskell category-theory

21
推荐指数
2
解决办法
1470
查看次数

如何防止从'0`构造std :: string引起的麻烦?

void foo (const std::string &s) {}

int main() {
  foo(0);   //compiles, but invariably causes runtime error
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器(g ++ 4.4)显然通过调用来解释0char* NULL和构造.这当然没用,因为指针不是指向c-string的有效指针.当我尝试调用时,这种误解不会出现,这有助于产生编译时错误.sstring::string(const char*, const Allocator &a = Allocator())NULLfoo(1)

当我不小心调用类似的函数时,是否有可能在编译时得到这样的错误或警告

void bar(const std::string &s, int i=1);
Run Code Online (Sandbox Code Playgroud)

bar(0),忘记了string,实际上有意义i=0

c++ string g++ null-pointer

19
推荐指数
1
解决办法
291
查看次数

使用不同的Python版本调用Python函数最接近的是什么?

说我有两个文件:

# spam.py
import library_Python3_only as l3

def spam(x,y)
    return l3.bar(x).baz(y)
Run Code Online (Sandbox Code Playgroud)

# beans.py
import library_Python2_only as l2

...
Run Code Online (Sandbox Code Playgroud)

现在假设我想spam从内部打电话beans.这不是直接可能的,因为两个文件都依赖于不兼容的Python版本.当然我可以Popen使用不同的python进程,但是如何在没有太多流解析的情况下传入参数并检索结果呢?

python compatibility popen

19
推荐指数
2
解决办法
1336
查看次数

如何正确链接用Haskell编写的目标文件?

大致遵循本教程,我设法让这个玩具项目工作.它从C++程序调用Haskell函数.

  • Foo.hs

    {-# LANGUAGE ForeignFunctionInterface #-}
    
    module Foo where
    
    foreign export ccall foo :: Int -> Int -> IO Int
    
    foo :: Int -> Int -> IO Int
    foo n m = return . sum $ f n ++ f m
    
    f :: Int -> [Int]
    f 0 = []
    f n = n : f (n-1)
    
    Run Code Online (Sandbox Code Playgroud)
  • bar.c++

    #include "HsFFI.h"
    #include FOO       // Haskell module (path defined in build script)
    
    #include <iostream>
    
    int main(int argc, char *argv[]) { …
    Run Code Online (Sandbox Code Playgroud)

c++ linker haskell ffi ghc

19
推荐指数
1
解决办法
640
查看次数