In preparing the speed ups in uuid-0.1.2, I investigated various ways to store 
16 bytes of data in a Haskell object.  Surprisingly, storing as 4 Word32 values 
in a standard data type worked best for that application.

I've extracted out the testing work for that and put it here:
        http://bitbucket.org/mtnviewmark/haskell-playground/src/tip/16bytes/

There you can find the code that tests storing 16 bytes in various ways:

> import qualified Data.Array         as A
> import qualified Data.Array.Unboxed as U
> import qualified Data.Array.Vector  as V
> import qualified Data.ByteString    as B
> 
> data InBytes = BY !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8
>                   !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8
>     deriving (Eq, Ord)
> 
> data InWords = WO !Word32 !Word32 !Word32 !Word32
>     deriving (Eq, Ord)
>     
> data InList       = LI [Word8]              deriving (Eq, Ord)
> data InByteString = BS B.ByteString         deriving (Eq, Ord)
> data InArray      = AR (A.Array Int Word8)  deriving (Eq, Ord)
> data InUArray     = UA (U.UArray Int Word8) deriving (Eq, Ord)
> data InVector     = VE (V.UArr Word8)       deriving (Eq)

Depending on operations will be needed most, different storage methods do best.

Enjoy!

        - Mark 

Mark Lentczner (MtnViewMark)
http://www.ozonehouse.com/mark/



_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to