【发布时间】:2012-11-28 07:35:35
【问题描述】:
我很难找到好的资源,这些资源可用于如何使我的数据类型未装箱,以便在未装箱的向量中使用。我将如何制作数据类型
data Color = Yellow | Red | Green | Blue | Empty deriving (Show, Eq)
是 Unbox 的一个实例吗?
编辑:经过一番探索,似乎通过强制某些函数中的参数严格,我可以说服 GHC 自动将它们拆箱。如果这适用于我的情况?我怎么知道哪些参数要严格?
【问题讨论】:
-
你看过this answer吗?
-
是的,GHCi 告诉我
Vector、MVector和U.Unbox不是可派生类。更不用说我真的不明白那里发生了什么,尤其是GeneralizedNewtypeDeriving的事情,我想在使用它们之前了解它们。 -
不是说它回答了你的问题,而是你尝试过在这里使用盒装向量吗?他们会毫不费力地处理您的数据类型。
-
当然。在我的程序中,从向量中提取值仍然占用了大约 12% 的时间,拆箱向量似乎是减少这种情况的方法。
-
一个简单的解决方法是使用包装成新类型(如
newtype Color = Color Int)的整数,而不是枚举数据类型。然后添加用于构造/解构实例的辅助函数。这不是很好,但如果性能很重要,它可能会有所帮助。见Performance-Data types-Enumerations。
标签: haskell unboxing algebraic-data-types