anchor.diff:    let saveValue key value =
       redis().SetValue(key, toJson value)
   
  -  let checkCacheAndReact keyFunction valueFunction n =
  +  let checkCacheAndReact keyFunction deserialiser valueFunction n =
       let r = redis()
       let key = keyFunction n
  -
  -    let getValue key = r.GetValue(key) |> fromJson
  -    let getSimulationResults() = getValue (monoKey n)
   
       let deleteMonoKey =
         (if r.ContainsKey(otherKey key n)
  
positive.code:     if r.ContainsKey(key)
      then
        LogLine.info ("Cache hit for " + key) |> logger.Log
        getValue key
      else
        LogLine.info ("Cache miss for " + key) |> logger.Log
        let value = valueFunction (getSimulationResults())
        cache value
        value
  
  module Monodeck =
    open ApiHelpers
  
negative.code:   let fromJson<'a> json =
      JsonConvert.DeserializeObject(json, typeof<'a>) :?> 'a
  
    let fromJsonTripleNestedList json =
      let tripleList = JsonConvert.DeserializeObject(json, typeof<float list list list>) :?> float list list list
      let round x = int (System.Math.Round(x : float))
      let listToTuple = function
        | x::y::[] -> (round x,y)
        | x -> raise (System.ArgumentException(x.ToString() + " is of the wrong form."))
      List.map (List.map listToTuple) tripleList
  
  
  module Redis =
    open ApiHelpers
  
  