anchor.diff:  /// Moves the zipper one level up
   let up z =
       match z.Path with
  -    | (d,v,other)::ep ->  
  -        match d with 
  -        | TreeDirection.Left  -> { Focus = Branch(v,z.Focus,other); Path = ep }
  -        | TreeDirection.Right -> { Focus = Branch(v,other,z.Focus); Path = ep }
  +    | (Left,v,other)::ep ->  { Focus = Branch(v,z.Focus,other); Path = ep }
  +    | (Right,v,other)::ep -> { Focus = Branch(v,other,z.Focus); Path = ep }
       | [] -> failwith "can't go up" // because ep only goes down and is empty 
   
   /// Moves the zipper to the top
  
positive.code: [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
  module FSharpx.DataStructures.TreeZipper
  
  /// A simple binarys tree
  type 'a Tree=
     | Leaf
     | Branch of 'a * 'a Tree * 'a Tree
  
  type TreeDirection =  Left | Right
  type ZipperDirection = Up | Left | Right 
  
  /// The tree zipper datastructure
  type 'a TreeZipper  = { 
  
negative.code: /// Moves the zipper to the left
  let left z = 
      match z.Focus with
      | (Branch(v, explored, other)) -> { Focus = explored; Path = (Left, v, other) :: z.Path }
      | Leaf -> failwith "can't go down on leaf"
  
  /// Moves the zipper to the right
  let right z = 
      match z.Focus with
      | (Branch(v, other, explored)) -> { Focus = explored; Path = (Right, v, other) :: z.Path }
      | Leaf -> failwith "can't go down on leaf"
  
  /// Creates a zipper from a tree
  let zipper t = { Focus = t; Path = [] } 
  
  type TreeZipperDirection = Up | Left | Right 
  
  let inline getMove direction =
      match direction with
  