The following code redefine the printfn function.
open System
type FSV = Microsoft.FSharp.Reflection.FSharpValue
type FST = Microsoft.FSharp.Reflection.FSharpType
let notImpl<'T> : 'T = raise (NotImplementedException())
let printfn (fmt : Printf.TextWriterFormat<'T>) : 'T =
let rec chain (ty : System.Type) : obj =
if FST.IsFunction ty then
let argTy, retTy = FST.GetFunctionElements ty
FSV.MakeFunction(ty, (fun _ -> chain retTy))
else
if ty.IsValueType then Activator.CreateInstance(ty) else null
chain typeof<'T> :?> 'T
let printf fmt = printfn fmt
No comments:
Post a Comment