      , price :: !Price
      }
  | Purchase { price :: Price }
  | UpdatePrice { price :: Price }
  | GetPrice { callback :: Address }
  | GetHeldToken { callback :: Address }
  | GetWallet { callback :: Address }
  | GetWantedToken { callback :: Address }


-- | Parse a natural number argument, given its field name
parseNatural :: String -> Opt.Parser Natural
parseNatural name =
  Opt.option Opt.auto $