para crear una secuencia de mi clase,F # - ¿Puedo usar el nombre de tipo como una función que actúa como el constructor predeterminado?
type MyInt(i:int) =
member this.i = i
[1;2;3] |> Seq.map(fun x->MyInt(x))
donde fun x->MyInt(x)
parece ser redundante. Sería mejor si puedo escribir Seq.map(MyInt)
Pero no puedo. Una solución que puedo pensar es definir una función separada
let myint x = MyInt(x)
[1;2;3] |> Seq.map(myint)
¿Hay una manera mejor de hacer esto?
Su definición de 'Nuevo' no compila para mí en el VS11 Beta. Sin embargo, una variante más simple hace: 'let inline New x = (^ t: (new:^u ->^t) x)'. – kvb
Lo intenté primero, pero con restricciones explícitas '^ t cuando^t: (nuevo:^u ->^t)' que no se compila en VS2010. Me alegra saber que hay una manera más simple de hacer esto. – Daniel
Curiosamente, el compilador solo admite restricciones de constructor explícitas de la forma 'nuevo: unidad -> 't' (que son directamente representables en metadatos .NET), pero aparentemente se puede usar una restricción de constructor más general _invocation expressions_ y dejar que el compilador infiera las restricciones . Definitivamente es un pequeño agujero en el sistema. – kvb