public X RunParallel <X>(ParallelDistInterpreter <A, X> interpreter)
 {
     return(interpreter.Primitive(dist));
 }
 public X RunParallel <X>(ParallelDistInterpreter <A, X> interpreter)
 {
     return(interpreter.Pure(Value));
 }
 public X RunParallel <X>(ParallelDistInterpreter <A, X> interpreter)
 {
     return(interpreter.Bind(dist, bind));
 }
 public X RunParallel <X>(ParallelDistInterpreter <Dist <A>, X> interpreter)
 {
     return(interpreter.Independent(Return(dist)));
 }
 public X RunParallel <X>(ParallelDistInterpreter <A, X> interpreter)
 {
     return(interpreter.RunIndependent(first, second, run));
 }
 public X RunParallel <X>(ParallelDistInterpreter <A, X> interpreter)
 {
     return(interpreter.Conditional(likelihood, dist));
 }