Hi cafe! I have a question of C-to-Haskell type:)

Imagine web application wich allows users to browse some shared
filesystem located at the server.
Application stores every users's position within that filesystem
(current directory or file).

In C this can be implemented with the help of following data types:

struct tree_node {
        union item {
                // some file data
                struct file *file;

                // struct dir has link to another list of tree_node
                struct dir *dir;
        };
        int type;

        // List of tree_nodes
        struct tree_node *next;
        struct tree_node *prev;
};

struct user {
        struct tree_node *position;

        // List of users
        struct user *next;
        struct user *prev;
};

This implementation will give us
1) O(1) time to insert to shared tree
2) O(1) time to access user's current position

Is it possible to reach this requirements in haskell?

For example, managing distinct tree type like

data TreeNode = File | Dir [TreeNode]

will lead to failure of req. 2 (have to traverse this
tree to find each user's position).

Also one could manage several zipper types (one for every user):

data TreeNodeCtx = Top | TreeNodeCtx {
        left :: [TreeNode],
        right :: [TreeNode],
        up :: TreeNodeCtx
        }

data TreeNodeZ = TreeNodeZ {
        ctx :: [TreeNodeCtx]
        pos :: TreeNode
        }

It works for one user but not for many because of req. 1 (have to
insert new item into
several zippers).

Any ideas?

-- 
Thanks,
Sergey
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to