我是新来的haskell,所以我试图在haskell中重新创建以下C++代码。我应该使用哪个容器?
int main() {
class MyClass {
public:
int a;
std::string s;
float f;
};
std::vector <MyClass> v;
LoadSerialized(&v); // don't need haskell equivalent; just reads a bunch of MyClass's and pushes them back onto v
}
现在,我已经看了哈斯克尔各种容器可能工作为的std ::向量的位置:有名单,未装箱向量,向量盒装,以及外国指针像下面这样的一些奇怪的用法:现在
data Table = Table { floats :: ForeignPtr CFloat
, ints :: ForeignPtr Int }
newTable :: IO Table
newTable = do
fp <- S.mallocByteString (floatSize * sizeOf (undefined :: CFloat))
ip <- S.mallocByteString (intSize * sizeOf (undefined :: Int ))
withForeignPtr fp $ \p ->
forM_ [0..floatSize-1] $ \n ->
pokeElemOff p n pi
withForeignPtr ip $ \p ->
forM_ [0..intSize-1] $ \n ->
pokeElemOff p n n
return (Table fp ip)
,我可以实现在我的思维方式的C++代码是最好的 - 是一个Haskell新手。或者我可以让那些对语言更有经验的人问最好的方式是什么,因为对我来说,看起来有一些细微差别在我这里发生,我错过了。简单地说,我想将包含许多数据类型的结构推送到haskell容器中,而我不关心顺序。如果有帮助,我将读取序列化数据到容器中,您可以看到LoadSerialized
。
我不是在C++代码混合。
(编辑:是的StackOverflow政策,允许通过编辑问题的审查(不小的),它说:“永远尊重原作者”)
n.b.是的,系统的意图在于编辑们删除了不必要的粗鲁。 StackOverflow是人们提出和回答编程问题的地方,它不是一个暴露不好的理由的地方。 – dave4420 2012-04-14 17:25:28
粗鲁吗?那是多么粗鲁?这就是为什么我不必要地重写在此之前发布的问题。 – joshj 2012-04-14 17:27:07
ehird,你比我付出更多的东西(语气本来就是事实),但我被推翻了。 – joshj 2012-04-14 18:07:54