Q:

F# Dynamic Eval, Reflection, IL

Since I seem to spend 95% of my coding time actually in F#'s FSI, I detoured (see:Distracted) and wanted to write some utility functions. 
The particular utility I am interested in is a 'disassemble' (http://www.cons.org/cmucl/doc/reading-disassembly.html) function that can dump the IL for a given function, later on maybe counting instructions, basic static analysis etc, generally this is just distraction heaven.  I have already written the code to map the byteArrayIL into MSIL names (almost).  
Here is the snippet that is used to get function names from the current module:
let dec_c = MethodBase. GetCurrentMethod().DeclaringType

System. Reflection. Assembly. GetAssembly(dec_c).GetTypes() 
|> Seq.map (fun x -> x.FullName) //, get_function_instructions x)

This works mostly ok, as the x.FullName reflects the actual function name:
FSI_0001
<StartupCode$FSI_0001>.$FSI_0001
FSI_0002
FSI_0002+instructions_of_bytes@24
FSI_0002+remove_null_function_body_bytes@32
FSI_0002+remove_null_function_body_bytes@31-1
FSI_0002+resolve_IL_from_bytes@38
FSI_0002+resolve_IL_from_bytes@36-1
FSI_0002+it@49
FSI_0002+it@50-1
<StartupCode$FSI_0002>.$FSI_0002
FSI_0003
FSI_0003+it@49-2
FSI_0003+it@50-3
<StartupCode$FSI_0003>.$FSI_0003

So we can easily write a function to filter based on our function name. 
Unfortunately (and probably due to my misunderstanding), it seems that not all functions are available in this manner, for example if we define the following simple function then re-run the dump:
(* reload FSI *)
let simple_add x = x + 1
(* rerun the function name dumping *)

FSI_0001
<StartupCode$FSI_0001>.$FSI_0001
FSI_0002
FSI_0002+instructions_of_bytes@24
FSI_0002+remove_null_function_body_bytes@32
FSI_0002+remove_null_function_body_bytes@31-1
FSI_0002+resolve_IL_from_bytes@38
FSI_0002+resolve_IL_from_bytes@36-1
FSI_0002+it@50
FSI_0002+it@51-1
<StartupCode$FSI_0002>.$FSI_0002

Strangely, there is no presence of 'simple_add' function in the resulting text. 
Thoughts:
    1.  Maybe the function simple_add isn't realised by reflection until it is seen to be used?  Sounds odd. 
    2.  It could be that one of those "FSI_0002+it" strings is actually our function. 
Questions:
    1.  Why doesn't the output reflect all the function names? 
    2.  Is there a better way of doing this? 

A:

I think I have slept (half slept) on the answer, I was going about it wrong, there is no need to have a list of per function string names...
let get_function_instructions (mb : System. Type) = 
  mb. GetMethods() 
  |> Seq.map ...

let find_func_print_instructions f =
  f.GetType()
  |> get_function_instructions 
  |> print_instruction_text

