WPF controls have many event members which has a same name without sharing the same interface or the base class. F#'s type constraint enables writing function which works on all the objects which has the same member. Then, if I can write type constraint for a event member, I can write curried function witch facilitates property setting in the same way for many controls.
open System.Windows.Controls
let inline click handler control =
(^T:(member Click:IEvent<_,_>)control)
.Add handler
Button()
|> click (fun _ -> ()) // error!
MenuItem()
|> click (fun _ -> ()) // error!
type A () =
[<CLIEvent>]
member __.Click = Event<_>().Publish
A() |> click (fun _ -> ()) // It works! but IntelliSense shows the member as "event A.Click .."
But the above code doesn't works.. I guess writing type constraint for event member is impossible.. Because it's a small problem and if we solve every small problems by language features, the language would become so complex as no one can use! (now F# seems powerful and simple)
Then I want to know some alternative way to solve this probrem, if it exists.
I solved it myself after post this question. You can access event member by calling method add_* and remove_*. And type constraint works with the method calling. Thanks!