小编hgi*_*sel的帖子

如何在'script:'中使用YAML的多行命令?

我有一个使用的存储库,Travis CI.travis.yml那里我有这一行:

script:
- vim -Nu <(cat <<-EOF
  set nocompatible |
  filetype off
  EOF
  ) -c 'Script' > /dev/null
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这不起作用,因为它被转换为单行并执行如下:

vim -Nu <(cat <<-EOF set no compatible | filetype off | EOF ) -c 'Script' > /dev/null
Run Code Online (Sandbox Code Playgroud)

这使得EOF标签不起作用,因为EOF需要在一行中.另一种方法是使用这样的常规引号:

script:
- vim -Nu <(cat 'set nocompatible |
  filetype off
  ) -c 'Script' > /dev/null
Run Code Online (Sandbox Code Playgroud)

哪个有效,并且很好,但我觉得必须有一种方法可以将换行符插入到.travis.yml.我现在有另一种选择,但将来我可能不会.你是怎么做到的?

bash continuous-integration yaml travis-ci

30
推荐指数
3
解决办法
1万
查看次数

Ed Kmett的递归方案包中的Fix,Mu和Nu有什么区别

在Ed Kmett的recursion-scheme包中,有三个声明:

newtype Fix f = Fix (f (Fix f))

newtype Mu f = Mu (forall a. (f a -> a) -> a)

data Nu f where 
  Nu :: (a -> f a) -> a -> Nu f
Run Code Online (Sandbox Code Playgroud)

这三种数据类型有什么区别?

haskell recursive-datastructures recursion-schemes fixpoint-combinators

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

如何(<$>)保持关联

我只是注意到它(<$>)的固定性infixl 4.怎么会这样?

(+1) <$> (/5) <$> [5,10] 显然从右到左.

haskell associativity

16
推荐指数
1
解决办法
628
查看次数

具有`bool`,`both`等功能的模式

我最近了解了GADTs他们和他们的符号:

例如

data Maybe a where
  Nothing :: Maybe a
  Just    :: a -> Maybe a

data Either a b where
  Left  :: a -> Either a b
  Right :: b -> Either a b

data Bool where
  False :: Bool
  True  :: Bool
Run Code Online (Sandbox Code Playgroud)

现在,我注意到一个similiarity像功能bool,并且either,这基本上是一样的GADT定义:

  1. 把每一行作为一个论据
  2. 用字母表的下一个字母替换实际类型
  3. 最后返回一个函数 Type -> (the letter of step 2)

例如

maybe  :: b -> (a -> b) -> Maybe a -> b
either :: (a -> …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching gadt

11
推荐指数
1
解决办法
250
查看次数

为什么C中的复合文字可以修改

人们通常将"不可修改的"与术语"文字"联系起来

char* str = "Hello World!";
*str = 'B';  // Bus Error!
Run Code Online (Sandbox Code Playgroud)

然而,当使用复合文字时,我很快发现它们是完全可修改的(并且锁定在生成的机器代码上,你会看到它们被推到堆栈上):

char* str = (char[]){"Hello World"};
*str = 'B';  // A-Okay!
Run Code Online (Sandbox Code Playgroud)

我正在编译clang-703.0.29.这两个例子不应该生成完全相同的机器代码吗?如果它是可修改的,复合文字真的是文字吗?

编辑:一个更短的例子是:

"Hello World"[0] = 'B';  // Bus Error!
(char[]){"Hello World"}[0] = 'B';  // Okay!
Run Code Online (Sandbox Code Playgroud)

c c99 literals compound-literals lvalue

10
推荐指数
1
解决办法
1226
查看次数

为什么<$>左关联?

fmap也是<$>因为它是函数$类中的函数application().

(+5)  $  (*10)  $  10      -- 105
(+5) <$> (*10) <$> [1,2,3] -- [15,25,35]
Run Code Online (Sandbox Code Playgroud)

然后我想,在这种情况下<*>,应用程序仿函数类别中的函数应用程序,这应该工作:

[(+5), (+10)] <*>  [(*10), (*100)] <*> [1,2,3]  -- ERROR
-- however:
[(+5), (+10)] <*> ([(*10), (*100)] <*> [1,2,3]) -- [15,25,35,...]
Run Code Online (Sandbox Code Playgroud)

因此,<$>只有因为fmap函数恰好是后期合成才会成功,因此(+5) <$> (*10)(+5) . (*10)其应用于[1,2,3].

然而,对于所有应用程序运算符(<<=包括)而言,左边的关联性在我看来似乎是一个糟糕的设计选择,特别是在他们认识到$已经是正确关联的相似性之后.还有其他原因吗?

haskell design-choices

9
推荐指数
1
解决办法
220
查看次数

您可以使用fetch API设置Host头

我有一个反向代理服务器,它根据主机头重定向到不同的服务.但是,使用浏览器向此服务器发出请求时,Host始终将其设置为URL中的域名.我试过了:

fetch("http://foo.com", {"headers":{"Host":"bar.foo.com"}})
Run Code Online (Sandbox Code Playgroud)

但它不起作用

javascript fetch-api

8
推荐指数
1
解决办法
3322
查看次数

对StateT,State和MonadState的困惑

我完全混淆了

newtype StateT s m a = StateT {runStateT :: s -> m (a, s)}
Run Code Online (Sandbox Code Playgroud)

type State s = StateT s Identity
Run Code Online (Sandbox Code Playgroud)

class Monad m => MonadState s m | m -> s
Run Code Online (Sandbox Code Playgroud)

haskell state-monad

8
推荐指数
2
解决办法
2539
查看次数

为什么我不能使用显式构造函数来构造返回类型

我玩了显式构造函数及其行为,所以我创建了这个类:

#include <iostream>

class X
{
public:
    explicit X(void)
    {
        std::cout << "Default constructor\n";
    }
    explicit X(X const& x)
    {
        std::cout << "Copy constructor\n";
    }
    explicit X(X&& x)
    {
        std::cout << "Move constructor\n";
    }
};
Run Code Online (Sandbox Code Playgroud)

这基本上只是测试显式构造函数的存根.然后我想尝试几种情况.所以我尝试了这个:

X foo(void)
{
    X a{};
    return a;  // ERROR: no matching constructor found!
}

int main()
{
    X w{};  // Default Constructor
    X x{w};  // Copy Constructor
    X y{std::move(x)};  // Move Constructor
    X z{foo()};
}
Run Code Online (Sandbox Code Playgroud)

你可以看到我不能回到a里面foo().我知道它尝试Foo使用复制构造函数初始化返回类型,但由于某种原因它无法使用它.

为什么它不能使用我提供的拷贝构造函数?我知道explicit …

c++ constructor explicit

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

亲切的签名和类型系列

我预计

type family Rep a
Run Code Online (Sandbox Code Playgroud)

type family Rep :: * -> *
Run Code Online (Sandbox Code Playgroud)

是一样的,但似乎有区别

type family   Rep a
type instance Rep Int  = Char
-- ok

type family   Rep :: * -> *
type instance Rep Int  = Char
-- Expected kind * -> *, but got 'Int' instead
Run Code Online (Sandbox Code Playgroud)

我只是偶然发现了一个Haskell扩展错误,还是有一些指向这种行为?

haskell types

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