Advertisement
Guest User

Untitled

a guest
Feb 5th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.21 KB | None | 0 0
  1. let globalIterator<'a> = fun (k:string) (v:'a) -> printfn "%s" k
  2.  
  3. (*
  4.  
  5. ....
  6.  
  7.  
  8. *)
  9.  
  10. [<EntryPoint>]
  11. let main argv =
  12. // ....
  13.  
  14.     // get the Map module
  15.     let map = mapType.Assembly.GetTypes() |> Array.find(fun t -> t.Name = "MapModule")
  16.     // get the MapModule.iter function
  17.     let iter = map.GetMethods(BindingFlags.Static ||| BindingFlags.Public) |> Array.find (fun m -> m.Name = "Iterate")
  18.  
  19.     // non generic function, but I need to set types at runtime
  20.     let staticIterator (k:string) (v:User.User) =
  21.         printfn "%s" k
  22.  
  23.     let a = System.Reflection.Assembly.GetExecutingAssembly()
  24.     printfn "a = %A" a
  25.     let modu = a.GetType("Program")
  26.     printfn "modu = %A" modu
  27.     let methodInfo = modu.GetMethod("globalIterator")
  28.     // specify type of generic argument
  29.     let closedIterator = methodInfo.MakeGenericMethod(recordType)
  30.     // specialise the generic iter function
  31.     let genericIter = iter.MakeGenericMethod([| typeof<string>  ; recordType |])
  32.     // next line works
  33.     genericIter.Invoke(null, [| staticIterator ; ttt4 |]) |> ignore
  34.     // I need this to work
  35.     // Doesn't work because it is a MethodInfo I pass.
  36.     genericIter.Invoke(null, [| closedIterator ; ttt4 |]) |> ignore
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement