anchor.diff:          with get() = 
               let gyroDefaultInit() =
                   gyro <- Some(new Trik.Gyroscope(-32767, 32767, "/dev/input/by-path/platform-spi_davinci.1-event"))
  -            defaultArg gyro (gyroDefaultInit(); gyro.Value)
  +            if gyro.IsNone then gyroDefaultInit()
  +            gyro.Value
   
       member x.Accel
           with get() = 
               let accelDefaultInit() = 
                   accel <- Some(new Trik.Accelerometer(-32767, 32767, "/dev/input/event1"))
  -            defaultArg accel (accelDefaultInit(); accel.Value)
  +            if accel.IsNone then accelDefaultInit()
  +            accel.Value
           
       member x.Led 
           with get() = 
               let ledDefaultInit() =
                   led <- Some(new Trik.Led("/sys/class/leds/"))
  -            defaultArg led (ledDefaultInit(); led.Value)
  +            if led.IsNone then ledDefaultInit()
  +            led.Value
       
       member x.Pad 
           with get() = 
               let padDefaultInit() =
                   pad <- Some(new Trik.PadServer(4444))
  -            defaultArg pad (padDefaultInit(); pad.Value)
  +            if pad.IsNone then padDefaultInit()
  +            pad.Value
   
       interface IDisposable with
           member x.Dispose() = 
  
positive.code:         |] with get, set
      member x.Motor
          with get() = 
              let motorDefaultInit() = 
                  IO.File.WriteAllText("/sys/class/gpio/gpio62/value", "1")
                  Helpers.I2C.send 0x10 0x1000 2
                  Helpers.I2C.send 0x11 0x1000 2
  
negative.code:                     |> Array.map (fun (port, cnum) -> (port, new AnalogSensor(cnum)))
                      |> dict
                      |> Some
              if analogSensor.IsNone then analogSensorDefaultInit()
              analogSensor.Value
      
      member x.Encoder
          with get() = encoder.Force()
  