anchor.diff:      | Commit c -> c.Tree
       | Tail -> null :> LibGit2Sharp.Tree
   
  +  let workingArea = function
  +    | Repository r ->
  +      let s = r.RetrieveStatus ()
  +      WorkingArea (Seq.concat [
  +        s.Added
  +        s.Modified
  +        s.Untracked
  +        s.Staged
  +        s.RenamedInIndex
  +        s.RenamedInWorkDir
  +       ] |> Seq.toList,Commit r.Head.Tip)
  +    
     let diff (c,c') = function
       | Repository r ->
         r.Diff.Compare<TreeChanges>(oldTree=c,newTree=c')
  
positive.code:   open Git
    
    type Arguments =
      | BaseUri of string
      | Path of string
      | Since of string
    with interface IArgParserTemplate with
      member s.Usage =
        match s with
          | BaseUri s -> "Base uri for generated provenence"
          | Path p -> "Path to a git repository"
          | Since r -> "Commit ref to generate PROV from"
          
    [<EntryPoint>]
    let main argv = 
      let parser = UnionArgParser.Create<Arguments>()
      let args = parser.Parse argv
      let repo = repo (args.GetResult (<@ Path @>,defaultValue="."))
      use fout = new System.IO.StreamWriter (System.Console.OpenStandardOutput())
      use g = new VDS.RDF.Graph ()
      TTL.ns.add (g,repo) 
      repo
      |> commits (args.GetResult (<@ Since @>,defaultValue="HEAD"))
      |> Seq.pairwise
      |> Seq.map (Prov.Activity.fromCommit repo)
      |> Seq.map (TTL.fromActivity g)
      |> Seq.last
      |> TTL.ttl fout
      
      0// return an integer exit code
  
  
negative.code:   let short sha = function
      | Repository r ->
        r.ObjectDatabase.ShortenObjectId sha
   
    type Uri =
      | Uri of string 
      with static member commit r c = Uri (sprintf "commit/%s" (short c r))
           static member workingarea = Uri "workingarea" 
           static member identity (c:LibGit2Sharp.Commit) = Uri (sprintf "user/%s" c.Author.Email)
           static member versionedcontent (c,p) = Uri (sprintf "commit/%s/%s" c p)
           static member individual (r,p) = Uri p
           override x.ToString () = match x with | Uri s -> sprintf "base:%s" s 
           
    type FileVersion = {
      Id : Uri
      PreviousVersion : string option
      SpecialisationOf : Uri
      Commit : Uri
      AttributedTo : Uri
      }
    with static member from (c:LibGit2Sharp.Commit,c':LibGit2Sharp.Commit,r) = seq {
          let d = diff (c.Tree,c'.Tree) r
          for f in d.Modified do yield {
            Id = Uri.versionedcontent (f.Oid.Sha,f.Path)  
            PreviousVersion = Some f.OldOid.Sha 
            SpecialisationOf = Uri.individual (r,f.Path) 
            Commit = Uri.commit r c
            AttributedTo = Uri.identity c 
            }
          }
         static member from (wx:LibGit2Sharp.StatusEntry list,r) = seq {
           for f in wx do yield {
             Id = Uri f.FilePath
             PreviousVersion = None
             SpecialisationOf = Uri.individual (r,f.FilePath)
             Commit = Uri.workingarea
             AttributedTo = Uri System.Environment.UserName
           }
         } 
    
    type Activity = {
      Id : Uri
  