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

你不明白吗?
就我而言,答案就是......全部!
特别是,我经常在Haskell论文中看到这样的符号,但我不知道它的含义是什么.我不知道它应该是什么样的数学分支.
我当然认识到希腊字母的字母,以及诸如"∉"之类的符号(通常意味着某些东西不是一组的元素).
另一方面,我以前从未见过"⊢"(维基百科称它可能意味着"分区").我也不熟悉这里使用的vinculum.(通常它表示一个级分,但是这并不出现在这里是这种情况.)
如果有人至少可以告诉我从哪里开始想要理解这个符号海洋的含义,那将会有所帮助.
haskell functional-programming lambda-calculus hindley-milner denotational-semantics
我一直在使用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.
有人可以帮忙吗?
我想要的
class Trivial t
instance Trivial t
Run Code Online (Sandbox Code Playgroud)
这在Haskell 98中当然没用,因为你可以省略约束; 但ConstraintKinds我们可以明确要求种类的论点* -> Constraint.理想情况下,我想将其定义为"匿名类型级函数" \type a -> (),但这显然是不可能的.
我应该怎么做,使用预定义的东西或者只在我需要的地方定义该类(因为实例是通用的,没有人需要访问它,看起来也很好)?
是否可以使用带向量的结构化绑定?
例如
std::vector<int> vec{1, 2, 3};
auto [a, b, c] = vec;
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码不起作用(在GCC下),但也许有一种不同的方式(结构化绑定)允许将向量的前三个值分配给三个变量.
我知道回归通常不是一个好主意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) cabal repl对于调试库非常有用,但是ghci将隐藏所有不属于cabal包的包.虽然这肯定是一件好事cabal build,因为repl它意味着我无法从不相关的软件包中加载某些内容以进行快速测试.
我可以通过发布访问任何包:set -package,但是这将从我正在处理的pacakge中卸载所有模块,从而击败了cabal repl.
简单地加载我已安装的软件包,但不希望作为我的库的依赖项,这是一个很好的方法吗?
函数可以是协变的和逆变的.这种协变/逆变二元性也可以应用于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类有意义吗?任何例子?
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)显然通过调用来解释0为char* 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?
说我有两个文件:
# 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进程,但是如何在没有太多流解析的情况下传入参数并检索结果呢?
大致遵循本教程,我设法让这个玩具项目工作.它从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)