[start grin cleanup
John Meacham <john@repetae.net>**20090708054056
 Ignore-this: 412264076646b627641fad46e4fa8558
] hunk ./Grin/Grin.hs 117
-    tIntzh = TyPrim (Op.bits32) -- Ty (toAtom "int")
-    tEnumzh = TyPrim (Op.bits16) -- Ty (toAtom "int")
-    tCharzh = TyPrim (Op.bits32) -- Ty (toAtom "HsChar")
-    --tStar = Ty (toAtom "*")
+    tIntzh = TyPrim (Op.bits32)
+    tEnumzh = TyPrim (Op.bits16)
+    tCharzh = TyPrim (Op.bits32)
hunk ./Grin/Grin.hs 156
+
+data BaseOp
+    = Demote                -- turn a node into an inode, always okay
+    | Promote               -- turn an inode into a node, the inode _must_ already be a valid node
+    | Eval                  -- evaluate an inode, returns a node representing the evaluated value. Bool is whether to update the inode
+    | StoreNode !Bool Val   -- create a new node, Bool is true if it should be an indirect node, the second val is the region
+    | Redirect              -- write an indirection over its first argument to point to its second one
+    | Overwrite             -- overwrite an existing node with new data (the tag must match what was used for the initial Store)
+    | Peek                  -- read a value from a pointed to location
+    | Poke                  -- write a value to a pointed to location
+    deriving(Eq,Ord,Show)
+
+    | BaseOp    { expBaseOp :: BaseOp,
+                  expArgs :: [Val],
+                  expType :: [Ty]
+                }
hunk ./Grin/Grin.hs 177
+
hunk ./Grin/Grin.hs 227
+    | Demote Val              -- ^ explicitly cast a node into an inode