小编ony*_*ony的帖子

Haskell多线程有多难?

我听说在Haskell中,创建一个多线程应用程序就像采用标准的Haskell应用程序并使用-threaded标志编译它一样简单.但是,其他情况描述了par在实际源代码中使用命令.

Haskell多线程的状态是什么?引入程序有多容易?是否有一个很好的多线程教程可以解决这些不同的命令及其用途?

concurrency multithreading haskell multicore

62
推荐指数
2
解决办法
2万
查看次数

cabal包中的C编译器选择

我决定添加一些标志来控制C源文件的编译方式(比如use-clang,use-intel等).

      C-Sources:    c_lib/tiger.c
      Include-Dirs: c_lib
      Install-Includes: tiger.h

      if flag(debug)
          GHC-Options: -debug -Wall -fno-warn-orphans
          CPP-Options: -DDEBUG
          CC-Options: -DDEBUG -g
      else
          GHC-Options: -Wall -fno-warn-orphans

问题是:descritpion文件中哪些选项需要修改才能更改C编译器?我确实找到了CC-Options.

haskell cabal

13
推荐指数
2
解决办法
1819
查看次数

std :: array构造函数继承

我正在尝试获得std::array数学向量的扩展变体(并公开相同的接口,array没有样板代码).我知道std::valarray但我想要固定大小以便在矩阵乘法中正确输入.因此我array非常适合.但是当我尝试继承构造函数时,它失败了.

struct vec2d : std::array<float, 2>
{ using array::array; }; // simplified

struct vec : std::vector<float>
{ using vector::vector; };

std::array<float, 2> x = {1, 2};
vec y = {1, 2};
vec2d z = {1, 2}; // error: could not convert ‘{1, 2}’ 
                  //        from ‘<brace-enclosed initializer list>’ to ‘vec2d’
Run Code Online (Sandbox Code Playgroud)

针对GCC 4.8.2和clang 3.4报告了此错误.最后说vec2d只有隐式默认/复制/移动构造函数.是的,array只有隐含的构造函数在违背vector其从构造函数initializer_list.但是由于ctors是继承的,因此继承初始化它的可能性与初始化相同array.

问题:为什么我们有错误而不是预期的行为(类似于array初始化)?

注意:我可以手动编写转发以使其工作,但这看起来不像ctor继承那么优雅.

struct vec2d : …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

C++ 11中lambda的内存管理

有人可以描述为什么这段代码不起作用(在从调用返回之前的GCC4.7.3 seg-faults上)?

#include <iostream>
#include <functional>
#include <memory>

using namespace std;

template<typename F>
auto memo(const F &x) -> std::function<decltype(x())()> {
    typedef decltype(x()) return_type;
    typedef std::function<return_type()> thunk_type;
    std::shared_ptr<thunk_type> thunk_ptr = std::make_shared<thunk_type>();

    *thunk_ptr = [thunk_ptr, &x]() {
        cerr << "First " << thunk_ptr.get() << endl;
        auto val = x();
        *thunk_ptr = [val]() { return val; };
        return (*thunk_ptr)();
    };

    return [thunk_ptr]() { return (*thunk_ptr)(); };
};

int foo() {
    cerr << "Hi" << endl;
    return 42;
}

int main() {
    auto x …
Run Code Online (Sandbox Code Playgroud)

c++ case-study c++11

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

在 Haskell 中将两个类合并/合并为一个

我有两个不重叠的类型集,并且想要制作其他集,这是这两个的并集。代码示例:

class A a
class B b
class AB ab

instance A a => AB a
instance B b => AB b
Run Code Online (Sandbox Code Playgroud)

GHC 6.12.3 不允许使用错误消息声明这一点:

    重复的实例声明:
      instance (A a) => AB a -- 定义于 playground.hs:8:9-19
      实例 (B b) => AB b -- 在 playground.hs:9:9-19 定义

我明白,这个声明导致失去对重叠实例的控制,AB a因为实例 forA aB b稍后可能出现(我看不出处理这个的简单方法)。
我想应该有一些“变通办法”来获得相同的行为。

PS 变体如:

newtype A a => WrapA a = WrapA a
newtype B b => WrapB b = WrapB b

instance A a …
Run Code Online (Sandbox Code Playgroud)

haskell types typeclass ghc

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

类型类是Haskell中另一个和默认实现的超集

当我尝试分解从列表表示中恢复树所需的一个类型类时,我遇到了一个有趣的情况.我们的想法是在原始层次结构中将元素的属性表示为彼此相对.

考虑数据类型的下一个特征

class HierarchyOrd a where
    -- | Compares two objects for being on the same branch of hierarchy
    -- LT/GT lower/higher in hierarchy, EQ on the same node
    hierarchyCompare :: a -> a -> Maybe Ordering

class HierarchyOrd a => Hierarchy a where
    -- | Get information for common joint of branches for two objects
    -- Either one of them already on joint node (parent)
    -- or we need another object that represent that joint
    hierarchyJoint :: a -> …
Run Code Online (Sandbox Code Playgroud)

haskell programming-languages typeclass

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