anchor.diff:      | true -> Some u
       | _ -> None
   
  -  let noneIfEmpty =
  +  let private noneIfEmpty =
       function
       | [] -> None
       | x :: xs -> Some(x :: xs)
  
positive.code:   let cnt = "http://www.w3.org/2011/content#"
    let compilation = "http://nice.org.uk/ns/compilation#"
    let git2prov = "http://nice.org.uk/ns/prov/"
  
  
  module graph =
  
negative.code:     |> Seq.toList
      |> noneIfEmpty
  
    let (|ObjectProperty|_|) p = function
      | Property p x ->
        x |> List.map (function
                     | O(Uri u,_) -> Some u
                     | _ -> None)
        |> List.filter Option.isSome
        |> List.map Option.get
        |> noneIfEmpty
      | _ -> None
  
    let private listOfOne = function
      | x::_ -> Some x
      | _ -> None
  
    let (|FunctionalProperty|_|) p = function
      | Property p x -> listOfOne x
      | _ -> None
  
    let (|FunctionalObjectProperty|_|) p = function
      | ObjectProperty p x -> listOfOne x
      | _ -> None
  
    let (|DataProperty|_|) p f = function
      | Property p xo -> Some(mapO f xo)
      | _ -> None
  
    let (|FunctionalDataProperty|_|) p f = function
      | FunctionalProperty p (O(o, _)) -> Some(f o)
      | _ -> None
  
    let (|Traverse|_|) p = function
      | Property p xo -> traverse xo |> noneIfEmpty
      | _ -> None
  
    let (|TraverseFunctional|_|) p = function
      | Traverse p xo -> listOfOne xo
      | _ -> None
  
    let (|HasType|_|) t = function
      | ObjectProperty wellknown.rdftype xs -> List.filter ((=) t) xs |> listOfOne
      | _ -> None
  
  module xsd =
    open VDS.RDF
  