Citações F # - atravessando chamadas de função representadas por um valor

Passei algumas horas tentando entender as cotações de F #, mas me deparei com um obstáculo. Meu requisito é tirar funções simples (apenas números inteiros, +, -, /, *) de um tipo de união discriminada e gerar uma árvore de expressão que eventualmente será usada para gerar o código C. Eu sei que isso é possível usando Cotações com funções 'diretas'.

Meu problema é que a árvore de expressão parece terminar com um "Valor", e não consigo descobrir como atravessar esse valor.

Minhas perguntas é se isso é realmente possível nesta situação? ou existem outras abordagens que valem a pena considerar.

type FuncType = 
| A of (int -> int -> int)
| B
| C

[<ReflectedDefinition>]
let add x y = x + y


let myFunc1 = A (fun x y -> x + y )
let myFunc2 = A add 

let thefunc expr = 
    match expr with
    | A(x) ->
        <@ x @>
    | _ ->
        failwith "fail"

printfn "%A" (thefunc myFunc1) // prints "Value (<fun:myFunc1@14>)"
printfn "%A" (thefunc myFunc2) // prints "Value (<fun:myFunc2@15>)"
printfn "%A" <@ fun x y -> x + y @> // generates usable expression tree

questionAnswers(1)

yourAnswerToTheQuestion