let print_type_c (x: Type)=
if x = typeof<Int32> then "int"
elif x = typeof<Single> then "float"
elif x = typeof<Tuple<_>> then "tuple"
elif x = typeof<FSharpFunc<Tuple<'inp>,'out>> then "function..."
else failwithf "Not supported(%A)" x
print_type_c (typeof<int>) // prints int
print_type_c (typeof<float32>) // prints float
print_type_c (typeof<int*int>) // throw an exception
Я пытаюсь создать примитивные цитаты F # для компилятора Cuda, и мне нужно выяснить, как преобразовать типы кортежей в типы структур C в объявлениях функций, но я действительно не знаком с тем, как работает механизм .NET. Разочаровывает то, что кавычки F# не возвращают вам хороший AST, основанный на размеченных объединениях, который сделал бы все явным, но если я не хочу сам выполнять проверку типов, мне придется поработать с этим.
Я спрашиваю - есть ли способ к дрянному фрагменту кода выше с сопоставлением шаблонов на .NET Type
s, потому что вышеизложенное явно не работает.
Изменить: вопрос не является дубликатом, потому что этот связанный вопрос спрашивает, как печатать свойства записей F #, а я спрашиваю, как печатать типы собственных типов .NET (включая функции) внутри котировок F #. Визуальное сканирование принятого ответа здесь и там должно показать, что они совершенно разные и даже не используют одни и те же функции.
typeof
для проверки типов. - person Marko Grdinic   schedule 20.10.2016