我听说在Haskell中,创建一个多线程应用程序就像采用标准的Haskell应用程序并使用-threaded标志编译它一样简单.但是,其他情况描述了par在实际源代码中使用命令.
Haskell多线程的状态是什么?引入程序有多容易?是否有一个很好的多线程教程可以解决这些不同的命令及其用途?
我决定添加一些标志来控制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.
我正在尝试获得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) 有人可以描述为什么这段代码不起作用(在从调用返回之前的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) 我有两个不重叠的类型集,并且想要制作其他集,这是这两个的并集。代码示例:
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 a和B 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) 当我尝试分解从列表表示中恢复树所需的一个类型类时,我遇到了一个有趣的情况.我们的想法是在原始层次结构中将元素的属性表示为彼此相对.
考虑数据类型的下一个特征
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 ×4
c++ ×2
c++11 ×2
typeclass ×2
cabal ×1
case-study ×1
concurrency ×1
ghc ×1
multicore ×1
types ×1