fork download
  1. open System
  2. open System.Reflection.Emit
  3. open System.Reflection
  4.  
  5. module Test =
  6. let ign _ = ()
  7. let getNowDateTime() = System.DateTime.Now
  8. let getNumbers count = [1..count]
  9.  
  10. let getInfoAboutModule (t : Type) =
  11.  
  12. let genericToString (t : Type) =
  13. match t.GenericTypeArguments with
  14. | [| |] -> t.FullName
  15. | x ->
  16. x
  17. |> Seq.map (fun x -> x.Name)
  18. |> String.concat ","
  19. |> sprintf "%s<%s>" t.Name
  20.  
  21. let getInfo (mi:MethodInfo) =
  22. let parameter =
  23. let sb = System.Text.StringBuilder()
  24.  
  25. for x in mi.GetParameters() do
  26. x.ParameterType
  27. |> genericToString
  28. |> sprintf "%s : %s ->" x.Name
  29. |> sb.Append
  30. |> ignore
  31.  
  32. sb.ToString()
  33. |> fun str -> if str |> System.String.IsNullOrEmpty then "unit -> " else str
  34.  
  35. sprintf "%s : %s %s" mi.Name parameter (genericToString mi.ReturnType)
  36.  
  37. t.GetMethods(BindingFlags.Public ||| BindingFlags.Static)
  38. |> Seq.map getInfo
  39.  
  40.  
  41. Assembly.GetCallingAssembly().GetTypes()
  42. |> Seq.tryFind (fun t -> t.Name = "Test")
  43. |> Option.map (getInfoAboutModule)
  44. |> Option.iter(Seq.iter (printfn "%s"))
Success #stdin #stdout 0.03s 132608KB
stdin
Standard input is empty
stdout
ign : _arg1 :  -> System.Void
getNowDateTime : unit ->  System.DateTime
getNumbers : count : System.Int32 -> FSharpList`1<Int32>