Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any way to implement a JE instance for [a]?

I'm writing a network processing program, and having some troubles. I decided to implement my directed graph as a Judy Array of linked lists of arcs. That is

JudyL [Arc]

where,

type Id  = Int
type Day = Int

data Arc = Arc { aid  :: Id,
                 time :: Day} deriving (Eq, Show)

However, Judy arrays require that their inputs can be converted to a Word value, or a word-sized pointer. In particular I must implement,

instance JE [a] where
     toWord :: [a] -> IO Word
     fromWord :: Word -> IO [a]

I however, have no idea whatsoever how to deal with pointers in Haskell. Any wisdom would be greatly appreciated. Perhaps I should just be using an array instead, but I fear that my dataset is very large (a terabyte uncompressed, though a lot of that data is extraneous) and have convinced myself that additional reads/writes on the (admittedly solid state) drive could seriously slow this down. IDK though.

like image 358
New_Caird Avatar asked Oct 16 '25 19:10

New_Caird


1 Answers

You can just copy and paste the ByteString instance, which essentially allocates a new StablePtr and then casts it to Word. Keep in mind that you will need to do your own deallocation when (if) the time comes for that.

like image 179
Daniel Wagner Avatar answered Oct 18 '25 16:10

Daniel Wagner