Skip to content

Instantly share code, notes, and snippets.

@kevmal
Created April 4, 2019 14:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevmal/eb79a2c8e4a0f59aeadcd063d1585069 to your computer and use it in GitHub Desktop.
Save kevmal/eb79a2c8e4a0f59aeadcd063d1585069 to your computer and use it in GitHub Desktop.
let makeExpr x =
let rec func (m : Expression) ps =
match m with
| :? MethodCallExpression as x ->
let lambda = x.Arguments.[0] :?> LambdaExpression
func lambda.Body (lambda.Parameters.[0] :: ps)
| _ -> Expression.Lambda(m, ps |> List.rev)
func (FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.QuotationToExpression(x)) [] :?> Expression<_>
let (|F0|) (f : Expr<unit -> 'a>) : Expression<Func<'a>> = makeExpr f
let (|F1|) (f : Expr<'a -> 'b>) : Expression<Func<'a,'b>> = makeExpr f
let (|F2|) (f : Expr<'a -> 'b -> 'c>) : Expression<Func<'a,'b,'c>> = makeExpr f
let (|F3|) (f : Expr<'a -> 'b -> 'c -> 'd>) : Expression<Func<'a,'b,'c,'d>> = makeExpr f
let (|F4|) (f : Expr<'a -> 'b -> 'c -> 'd -> 'e>) : Expression<Func<'a,'b,'c,'d,'e>> = makeExpr f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment