小编bmk*_*bmk的帖子

使用`MonadBaseControl` API

我目前正在玩Bryan O'Sullivan的资源池库,并且有关于扩展withResource功能的问题.我想将withResource函数的签名更改 (MonadBaseControl IO m) => Pool a -> (a -> m b) -> m b(MonadBaseControl IO m) => Pool a -> (a -> m (Bool, b)) -> m b.
我想要实现的是,操作应该返回(Bool, b)元组,其中布尔值指示是否应该将借来的资源放回池中或销毁.

现在我的当前实现看起来像这样:

withResource :: forall m a b. (MonadBaseControl IO m) => Pool a -> (a -> m (Bool, b)) -> m b
{-# SPECIALIZE withResource :: Pool a -> (a -> IO (Bool,b)) -> IO b #-} …
Run Code Online (Sandbox Code Playgroud)

monads haskell monad-transformers

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

在私有继承的情况下,什么时候可以上传?

我对C ++的私有继承有疑问。请参见以下代码示例:

#include <iostream>

class Foo {
  public:
    virtual void doSomething(int value) {
      std::cout << value << std::endl;
    }

};

void foobar(Foo& foo, int value) {
  foo.doSomething(value);
}

class Bar : Foo {
  public:
    Bar() {
      foobar(*this, 42);  // <--- is OK despite private inheritance
    }
};

int main() {
  Bar b;
  foobar(b, 42); // <--- is NOT OK because of private inheritance
}
Run Code Online (Sandbox Code Playgroud)

目前,我无法理解(或找到正确的C ++规范)为何尽管有私有继承foobar也可以在Bar的构造函数中调用该函数。如果我尝试调用函数对象的函数,编译器为如预期,因为私有继承的错误。*this foobarBarbmain

foobar(*this, 42)foobar(b, …

c++ inheritance

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

`nullopt`可以作为非类型模板参数传递吗?

请考虑以下代码示例

#include <iostream>
#include <experimental/optional>

std::experimental::optional<int> dflt(42);

template<const std::experimental::optional<int>& Dflt>
void foo() {
    if (Dflt) {
        std::cout << "default is set" << std::endl;
    } else {
        std::cout << "default is not set" << std::endl;
    }
}

int main() {
        foo<dflt>();                       // <-- OK
        foo<std::experimental::nullopt>(); // <-- NOT OK
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是nullopt作为非类型函数模板参数传递但它不编译.它适用于dflt具有静态存储的全局变量.

编译器错误消息如下所示:

foo.cc: In function ‘int main()’:
foo.cc:13:34: error: no matching function for call to ‘foo()’
  foo<std::experimental::nullopt>();
                                  ^
foo.cc:7:6: note: candidate: template<const std::experimental::fundamentals_v1::optional<int>& Dflt> void foo()
 void …
Run Code Online (Sandbox Code Playgroud)

c++ c++17

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

使用Haskell进行竞争性编程

我目前正试图通过解决一些Hackerrank问题来刷新我的Haskell知识.

例如:

https://www.hackerrank.com/challenges/maximum-palindromes/problem

我已经在C++中实现了一个必需的解决方案,它已被所有测试用例所接受.现在我试图在(合理的惯用)Haskell中提出一个纯粹的功能解决方案.

我目前的代码是

module Main where

import           Control.Monad
import qualified Data.ByteString.Char8 as C
import           Data.Bits
import           Data.List
import qualified Data.Map.Strict       as Map
import qualified Data.IntMap.Strict    as IntMap
import           Debug.Trace

-- precompute factorials
compFactorials :: Int -> Int -> IntMap.IntMap Int
compFactorials n m = go 0 1 IntMap.empty
  where
    go a acc map
      | a < 0     = map
      | a < n     = go a' acc' map'
      | otherwise = map'
      where
        map' = IntMap.insert a acc …
Run Code Online (Sandbox Code Playgroud)

performance haskell

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

在haskell-indentation模式下自定义缩进宽度

我目前正在使用Emacs作为我开发Haskell代码的主要IDE,到目前为止我真的很满意.但目前我无法弄清楚一个小细节,即如何自定义缩进宽度为4而不是2.

目前,我已经把上haskell-indentationhaskell-mode,但我想不出我有设置自定义压痕宽度什么变化.到目前为止,我已尝试设置,'(haskell-indent-spaces 4)但这似乎没有任何影响......

请提前获取任何帮助!

emacs haskell haskell-mode

4
推荐指数
1
解决办法
666
查看次数

Emacs sr-speedbar

我目前正在尝试更深入地学习Emacs,以便我可以使用我的Emacs做更多的事情,而不仅仅是简单的编辑...我正在取得良好的进展,目前我正在尝试将'sr-speedbar'模块配置为我的喜欢,但有些细节我无法弄清楚自己:

  • 假设我有2个打开缓冲区窗口A和B加上快速栏窗口.如果我在快速栏窗口中按Enter键打开文件,则新文件总是在同一缓冲区窗口B(我最后打开)中打开.我可以以某种方式指定应在缓冲区窗口A中打开新内容吗?
  • 目前,只要我使用"Cx C-f"打开新文件,速度栏窗口就会自动刷新到新位置.这实际上非常有用,但是当我在tmp文件中快速尝试时,有时我不想要这个.刷新还"破坏"了我对速度条的"树视图",在那里我扩展了目录内容而不是直接打开它们.问题是,我该如何抑制这种"清新行为"?我可以以某种方式禁用自动模式并在需要时手动触发它吗?

你们有关于快速栏导航的更多有用提示吗?Emacs大师如何使用speedbar或者有更好的选择?

Thx提前为您提供帮助!

emacs editor

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

GHCi 内的函数定义

是否可以在GHCi中编写带有类型签名的多行函数定义(就像将其编写在源文件中一样)?

\n\n

到目前为止我已经尝试过这样的事情:

\n\n
Prelude> :{\nPrelude| let f :: Int -> Int;\nPrelude| f i = i + 1\nPrelude| :}\n\n<interactive>:9:1: parse error on input \xe2\x80\x98f\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不起作用...还有什么我可以尝试的吗?

\n

haskell ghci

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

需要帮助来理解 `liftBase` 的用法

我目前正在阅读(出于自学目的)Bryan O'Sullivan 的流行pool 的源代码。

我在函数中有一个问题takeResource,我想在这里询问Haskell专家。该函数定义为:

takeResource :: Pool a -> IO (a, LocalPool a)
takeResource pool@Pool{..} = do
  local@LocalPool{..} <- getLocalPool pool
  resource <- liftBase . join . atomically $ do
  ents <- readTVar entries
  case ents of
    (Entry{..}:es) -> writeTVar entries es >> return (return entry)
    [] -> do
      used <- readTVar inUse
      when (used == maxResources) retry
      writeTVar inUse $! used + 1
      return $
        create `onException` atomically (modifyTVar_ inUse (subtract 1))
  return (resource, …
Run Code Online (Sandbox Code Playgroud)

haskell

3
推荐指数
2
解决办法
118
查看次数

c ++的`const`承诺有什么用?

我试图const更深入地理解c ++的语义,但我无法完全理解constness保证值得的是什么.正如我所看到的,constness保证不会有变异,但请考虑以下(人为的)示例:

#include <iostream>
#include <optional>
#include <memory>

class A {
public:
  int i{0};

  void foo() {
    i = 42;
  };
};

class B {
public:
  A *a1;
  A a2;

  B() {
    a1 = &a2;
  }

  void bar() const {
    a1->foo();
  }
};

int main() {
  B b;
  std::cout << b.a2.i << std::endl; // output is 0

  b.bar();

  std::cout << b.a2.i << std::endl; // output is 42
}
Run Code Online (Sandbox Code Playgroud)

因为bar就是const,人们会认为它不会发生变异对象b.但是在它的调用b发生变异之后.如果我写的方法foo …

c++ const

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