Skip to content

Instantly share code, notes, and snippets.

@ingted
Created February 19, 2024 14:42
Show Gist options
  • Save ingted/8898a98b28dd450d1f56a2ff4a18df28 to your computer and use it in GitHub Desktop.
Save ingted/8898a98b28dd450d1f56a2ff4a18df28 to your computer and use it in GitHub Desktop.
FS1113
let inline a<'T when 'T: (member o : int)> (t:'T) =
t.o
type MyType< ^T
when ^T: (member o : int)
> (t:^T) =
let mutable ttc :^T = Unchecked.defaultof< ^T>
//member val ttc :'T = Unchecked.defaultof<'T> with get,set
member inline this.set v = ttc <- v
member inline this.get () = (^T :(member o : int)(ttc))
type MyType2<'T
when 'T: (member o : int)> (t:'T) =
class
do a t |> ignore
end
//not working both
type MyType3< ^T
when ^T: (member o : int)
> () =
member this.get (t:^T) = (^T :(member o : int)(t))
type MyType4 () =
static member inline get< ^T
when ^T: (member o : int)
> (t:^T) = (^T :(member o : int)(t))
type MyType5 () =
static member inline get< ^T
when ^T: (member o : int)
> (t:^T) = t.o
//working
type MyType6< ^T
when ^T: (member o : int)
> () =
static member inline get (t:^T) = t.o
//not working
type MyType6_2< ^T
when ^T: (member o : int)
> () =
static member val T = 123
static member inline get (t:^T) = t.o
//not working
type MyType7< ^T
when ^T: (member o : int)
> (t:^T) =
member inline this.get () = t.o
//not working in .net 8, working in .net 5
type MyType7_2< ^T
when ^T: (member public o : int)
> (t:^T) =
member inline public this.get () = (^T :(member public o : int)(t))
type MyType7_3< ^T
when ^T: (member public o : int)
> () =
let mutable a = Unchecked.defaultof< ^T>
member inline public this.set (t:^T) = a <- t
member inline public this.get (t:^T) = (^T :(member public o : int)(t))
type MyType7_4< ^T
when ^T: (member public o : int)
> () =
let mutable a = Unchecked.defaultof< ^T>
member inline public this.set (t:^T) = t
//member inline public this.get (t:^T) = (^T :(member public o : int)(t))
//not working in .net 8, working in .net 5
type MyType7_6< ^T
when ^T: (member public o : int)
> (tt: ^T ref) =
member val ttt = 123
member inline public this.set (t:^T) = t
member inline public this.get () = ttt
//not working in .net 8, not working in .net 5
type MyType7_5< ^T
when ^T: (member o : int)
> (t:^T) =
member this.get () = (^T :(member o : int)(t))
//not working
type MyType8< ^T
when ^T: (member o : int)
> () =
static member val T = 123
//not working
type MyType8_2< ^T
when ^T: (member o : int)
> () =
static member T = 123
//working in .net 8, working in .net 5
type MyType8_3< ^T
when ^T: (member o : int)
> () =
static member inline T = 123
//not working in .net 8, working in .net 5
type MyType8_4< ^T
when ^T: (member o : int)
> (t:^T) =
member inline this.T = t
//not working in .net 8, working in .net 5
type MyType8_5< ^T
when ^T: (member o : int)
> (t:int) =
member inline this.T = t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment