opened on CodePlex by marten_range
Evaluating the following in FSI results in an internal error
~vs514B.fsx(35,6): error FS0073: internal error: Undefined or unsolved type variable: 'a
The error marker corresponds to the line type DelayedAdornerUpdater ...
#r "PresentationCore"
#r "PresentationFramework"
#r "System.Xaml"
#r "UIAutomationTypes"
#r "WindowsBase"
open System
open System.Windows
open System.Windows.Documents
let FindAdorner (layer : AdornerLayer) (e : UIElement) : #Adorner =
if layer <> null then
let adorners = layer.GetAdorners e
if adorners <> null then
let mutable iter = 0
let mutable result = null
while (not (Object.ReferenceEquals(result, null))) && iter < adorners.Length do
match adorners.[iter] with
| :? #Adorner as a -> result <- a
| _ -> ()
iter <- iter + 1
result
else
null
else
null
let UpdateLoadedAdorner (updater : FrameworkElement*AdornerLayer*#Adorner->unit, fe : FrameworkElement) =
let layer = AdornerLayer.GetAdornerLayer fe
if layer <> null then
let adorner = FindAdorner layer fe
updater (fe, layer, adorner)
type DelayedAdornerUpdater(updater : FrameworkElement*AdornerLayer*#Adorner->unit, fe : FrameworkElement) as this =
let onLoaded sender args =
fe.Loaded.RemoveHandler this.OnLoaded
UpdateLoadedAdorner (updater, fe)
member this.OnLoaded = RoutedEventHandler onLoaded
let UpdateAdorner (updater : FrameworkElement*AdornerLayer*#Adorner->unit) (e : UIElement) : unit =
match e with
| :? FrameworkElement as fe ->
if fe.IsLoaded then UpdateLoadedAdorner (updater, fe)
else
let updater = DelayedAdornerUpdater (updater, fe)
fe.Loaded.AddHandler updater.OnLoaded
| _ -> ()
comments
marten_range wrote Oct 22, 2014 at 12:17 PM [x]
Rewriting DelayedAdornerUpdater to this seems to get the compiler on the right track:
type DelayedAdornerUpdater<'Adorner when 'Adorner :> Adorner and 'Adorner : null>(updater : FrameworkElement_AdornerLayer_'Adorner->unit, fe : FrameworkElement) as this =
let onLoaded sender args =
fe.Loaded.RemoveHandler this.OnLoaded
UpdateLoadedAdorner (updater, fe)
member this.OnLoaded = RoutedEventHandler onLoaded
opened on CodePlex by marten_range
Evaluating the following in FSI results in an internal error
The error marker corresponds to the line
type DelayedAdornerUpdater ...