Well, it is impossible to create generic properties -- this is a .NET restriction.
However, after a quick look at the Kendo documentation, it seems the best way to bind this would be to make the DataSourceConfiguration itself generic on the data type. Something like this:
For the namespacing question: if these types are accepted or returned by useful classes / methods / properties, they're not really dummy types, are they? :) You can probably shove them into a sub-namespace if you're afraid of cluttering, but if they're used, then they have to be accessible somewhere. Or maybe nest each configuration into its corresponding class:
However, after a quick look at the Kendo documentation, it seems the best way to bind this would be to make the DataSourceConfiguration itself generic on the data type. Something like this:
let DataSourceConfiguration =
Generic / fun t ->
Pattern.Config "kendo.data.DataSourceConfiguration" {
Required = []
Optional =
[
"data", Type.ArrayOf t
]
}
// And then:
let DataSource =
Class "kendo.data.DataSource"
|+> [
Generic - fun t -> Constructor (DataSourceConfiguration t)
]
Maybe even making DataSource generic w.r.t. the data type would make sense, I'm not sure.For the namespacing question: if these types are accepted or returned by useful classes / methods / properties, they're not really dummy types, are they? :) You can probably shove them into a sub-namespace if you're afraid of cluttering, but if they're used, then they have to be accessible somewhere. Or maybe nest each configuration into its corresponding class:
let DataSource =
Class "kendo.data.DataSource"
|=> Nested [DataSourceConfiguration]
Understood, I was leaning towards that and had failed to notice that the DataSourceConfiguration was indeed generic in your existing wrapper.
Merci Loic.
David
Merci Loic.
David
Not so sure how to hoist the nested type now that it's got the generic argument though.
-- Correction
It doesn't seem to be the nested type that is at problem rather the Constructor for DataSource.
Ended up bringing the generic parameter up to the DataSource as well.
-- Correction
It doesn't seem to be the nested type that is at problem rather the Constructor for DataSource.
Ended up bringing the generic parameter up to the DataSource as well.
Topic tags
- f# × 3667
- compiler × 263
- functional × 200
- websharper × 123
- c# × 119
- classes × 96
- web × 94
- book × 84
- .net × 82
- async × 72
- parallel × 43
- server × 43
- parsing × 41
- testing × 41
- asynchronous × 30
- monad × 28
- ocaml × 26
- tutorial × 26
- haskell × 25
- workflows × 22
- html × 21
- linq × 21
- introduction × 19
- silverlight × 19
- wpf × 19
- fpish × 18
- collections × 14
- pipeline × 14
- templates × 12
- monads × 11
- opinion × 10
- reactive × 10
- plugin × 9
- scheme × 9
- sitelets × 9
- solid × 9
- basics × 8
- concurrent × 8
- deployment × 8
- how-to × 8
- python × 8
- complexity × 7
- javascript × 7
- jquery × 6
- lisp × 6
- real-world × 6
- workshop × 6
- xaml × 6
- conference × 5
- dsl × 5
- java × 5
- metaprogramming × 5
- ml × 5
- scala × 5
- visual studio × 5
- formlets × 4
- fsi × 4
- lift × 4
- sql × 4
- teaching × 4
- alt.net × 3
- aml × 3
- enhancement × 3
- list × 3
- reflection × 3
- type provider × 3
- blog × 2
- compilation × 2
- computation expressions × 2
- corporate × 2
- courses × 2
- cufp × 2
- enterprise × 2
- entity framework × 2
- erlang × 2
- events × 2
- f# interactive × 2
- fsc × 2
- google maps × 2
- html5 × 2
- http × 2
- interactive × 2
- interface × 2
- iphone × 2
- iteratee × 2
- jobs × 2
- kendo × 2
- keynote × 2
- mvc × 2
- numeric × 2
- obfuscation × 2
- oop × 2
- packaging × 2
- pattern matching × 2
- pipelines × 2
- rx × 2
- script × 2
- seq × 2
- sockets × 2
- stm × 2
- tcp × 2
- trie × 2
- type × 2
- xna × 2
- zh × 2
- .net interop × 1
- 2012 × 1
- abstract class × 1
- accumulator × 1
- active pattern × 1
- addin × 1
- agents × 1
- agile × 1
- alter session × 1
- android × 1
- anonymous object × 1
- appcelerator × 1
- architecture × 1
- array × 1
- arrays × 1
- asp.net 4.5 × 1
- asp.net mvc × 1
- asp.net mvc 4 × 1
- asp.net web api × 1
- aspnet × 1
- ast × 1
- b-tree × 1
- bistro × 1
- bug × 1
- camtasia studio × 1
- canvas × 1
- class × 1
- client × 1
- clojure × 1
- closures × 1
- cloud × 1
- cms × 1
- coding diacritics × 1
- color highlighting × 1
- combinator × 1
- confirm × 1
- constructor × 1
- continuation-passing style × 1
- coords × 1
- coursera × 1
- csla × 1
- css × 1
- current_schema × 1
- data × 1
- database × 1
- declarative × 1
- delete × 1
- dhtmlx × 1
- discriminated union × 1
- distance × 1
- docs × 1
- documentation × 1
- dol × 1
- domain × 1
- du × 1
- duf-101 × 1
- eclipse × 1
- edsl × 1
- em algorithm × 1
- emacs × 1
- emotion × 1
- error × 1
- etw × 1
- euclidean × 1
- event × 1
- example × 1
- examples × 1
- ext js × 1
- extension methods × 1
- extra × 1
- facet pattern × 1
- fantomas × 1
- fear × 1
- float × 1
- fp × 1
- frank × 1
- fsdoc × 1
- fsharp.core × 1
- fsharp.powerpack × 1
- fsharpx × 1
- function × 1
- functional style × 1
- gc × 1
- generic × 1
- geometry × 1
- getlastwin32error × 1
- google × 1
- group × 1
- hash × 1
- history × 1
- hosting × 1
- httpcontext × 1
- https × 1
- hubfs × 1
- ie 8 × 1
- if-doc × 1
- inheritance × 1
- installer × 1
- interpreter × 1
- io × 1
- ios × 1
- ipad × 1
- kendochart × 1
- kendoui × 1
- learning × 1
- licensing × 1
- macro × 1
- macros × 1
- maps × 1
- markup × 1
- marshal × 1
- math × 1
- metro style × 1
- micro orm × 1
- minimum-requirements × 1
- multidimensional × 1
- multiline × 1
- multithreading × 1
- mysql × 1
- mysqlclient × 1
- nancy × 1
- nested × 1
- nested loops × 1
- node × 1
- object relation mapper × 1
- object-oriented × 1
- offline × 1
- option × 1
- orm × 1
- osx × 1
- owin × 1
- paper × 1
- parameter × 1
- performance × 1
- persistent data structure × 1
- phonegap × 1
- pola × 1
- powerpack × 1
- prefix tree × 1
- principle of least authority × 1
- programming × 1
- projekt_feladat × 1
- protected × 1
- provider × 1
- ptvs × 1
- quant × 1
- quotations × 1
- range × 1
- raphael × 1
- razor × 1
- rc × 1
- real-time × 1
- reference × 1
- rest × 1
- restful × 1
- round table × 1
- runtime × 1
- scriptcs × 1
- scripting × 1
- service × 1
- session-state × 1
- sitelet × 1
- sqlentityconnection × 1
- standards × 1
- stickynotes × 1
- stress × 1
- strong name × 1
- structures × 1
- tdd × 1
- template × 1
- text parsing × 1
- tracing × 1
- tsunamiide × 1
- type inference × 1
- type providers × 1
- typescript × 1
- upload × 1
- vb × 1
- vb.net × 1
- vector × 1
- visual f# × 1
- visual studio 11 × 1
- visual studio 2012 × 1
- visual studio shell × 1
- visualstudio × 1
- web api × 1
- webapi × 1
- windows 7 × 1
- windows 8 × 1
- windows-phone × 1
- winrt × 1
- xml × 1
- yield × 1
- zarovizsga × 1
|
Copyright (c) 2024 IntelliFactory. All rights reserved. | | | Trainings | | | |
Built with |
I'm trying to figure out how to create a generic property in a Configuration Class Pattern.
The union cases in
Type.Typeare private and it seems theGeneric - fun t ->[...]pattern is only usable to generate a generic method.I resorted to an ugly hack like this which makes me certain I do not have to do this:
let data = let q = ref None Generic - fun t -> q := Some(Type.ArrayOf t) "data" => Type.ArrayOf t |> ignore q.Value.Value let DataSourceConfiguration = Pattern.Config "kendo.data.DataSourceConfiguration" { Required = [] Optional = [ "Data", data ] }Another part to this question is that it seems any type I generate but do not include in the type hierarchy ends up as
objin the resulting code. Not sure if this is normal and which way is appropriate to handle this as I do not necessarily want to pollute my namespace hierarchy with dummy types.Thanks a lot,
David