Dre*_*rew 6 unboxing haskell algebraic-data-types
我无法找到适合如何使我的数据类型取消装箱的良好资源,以便在未装箱的矢量中使用.我如何制作数据类型
data Color = Yellow | Red | Green | Blue | Empty deriving (Show, Eq)
Run Code Online (Sandbox Code Playgroud)
是Unbox的一个实例?
编辑:经过更多的探讨后,似乎通过强制某些函数中的参数是严格的,我可以说服GHC自动取消装箱.如果这适用于我的情况?我怎么知道哪些参数要严格?
您可以使用vector-th-unbox包为您派生实例.您只需要在某些现有Unbox类型中提供转换函数:
colorToWord8 :: Color -> Word8
colorToWord8 = ...
word8ToColor :: Word8 -> Color
word8ToColor = ...
derivingUnbox "Color"
[t| Color -> Word8 |]
colorToWord8
word8ToColor
Run Code Online (Sandbox Code Playgroud)
GeneralizedNewtypeDeriving在这里不会对你有帮助,因为你正在处理一个“成熟的”ADT,而不是一个包装已经是Unbox.
您的数据类型更适合盒装向量。Data.Vector.Unboxed如果您需要保存更原始的数字类型(如Doubles、Ints 等),请使用。也许您可以创建Color的实例Unbox,但几乎肯定不值得这么麻烦。导入Data.Vector,您将被设置:
import qualified Data.Vector as V
Color = Red | Blue deriving Show
someColors :: V.Vector Color
someColors = V.fromList [Red, Blue, Blue, Red]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |