title: Tips on designing a .NET API for future use with F#
body: <p>I'm in the process of designing a .NET API to allow developers to create RoboCup agents for the <a href="http://en.wikipedia.org/wiki/RoboCup_3D_Soccer_Simulation_League" rel="nofollow noreferrer">3D simulated soccer league</a>.</p>
  
  <p>I'm pretty happy with how the API work with C# code, however I would like to use this project to improve my F# skill (which is currently based on reading rather than practice).</p>
  
  <p>So I would like to ask what kinds of things I should consider when designing an API that is to be consumed by both C# and F# code.</p>
  
  <p>Some points.</p>
  
  <ul>
  <li>I make fairly heavy use of matrix and vector math.  These are currently immutable classes/structs.</li>
  <li>The API currently defines a few interfaces with the consumer implements (eg: <code>IAgent</code>), using instances of their implementations (eg: <code>MyAgent</code>) to construct other API classes (eg: <code>new Client(myAgent)</code>).</li>
  <li>The API fires events.</li>
  <li>The API exposes a few delegate types.</li>
  <li>The API includes several enums.</li>
  </ul>
  
  <p>I'd like to release a version of the API as soon as possible and don't want to make major changes to it later if I realise it's too difficult to work with from F#.  Any advice is appreciated.</p>