It's well intentioned, but this project is destined to go nowhere fast.
Abstracting away web development and http has been tried again and again, and always ends up being more hassle than plain ol' HTML+JS+HTTP.
Then you've limited yourself to interop with the js libraries they've provided leaky wrappers over, or you can write your own leaky wrapper if you want to use coolnewthing.js you saw on github.
And to cap it all, this framework requires commercial licensing for closed source projects!
It's been around for a few years. I was able to use it to quickly whip up some sorta-complicated UIs for some internal tools. I despise JS, and have spent hours of time fixing simple casing errors or other things that static typing would fix. Plus F# the language is quite superior to JS, so I don't feel icky while working on it.
The other benefit is that I can use all the same type definitions, so I don't need to write some generator or wrapper around my XHR functions - it just works.
It's quite easy to just drop out into pure JS if you feel the need. And defining wrappers is actually very very simple. For example:
Interop with JS libraries can be solved without wrappers. GWT 3.0 introduces a new interop system that can take WebIDL, @JsDoc, or TypeScript annotations as descriptive of the interface of the underlying Javascript and synthesize Java interfaces that match the API. The compiler can generate code to call into Javascript with zero wrappers, maximizing performance and code size. It can even sub-class native Javascript objects (class Foo extends Bar.Prototype) using only standard Java syntax.
For example, using similar techniques that html5index.org uses, all browser native APIs are automatically covered by fetching the latest WebIDL definitions from Chromium or Firefox's repository or via standards docs, and used to generate the interfaces.
Or, using IDE FileWatchers, we use the Closure Compiler to read in Javascript libraries and/or externs, infer types, and write out interfaces. Likewise, we'll be able to read in typescript library interfaces and generate Java interfaces.
Combining the new JsInterop system, Java8, and SuperDevMode's <1 second compiles, the new system eliminates wrappers, reduces Java boilerplate overhead (lambdas, method references), and provides fast refresh times.
Sounds exactly like Opa Lang. Though they've finally moved away from AGPL, but it is too late and their confusing incorrect marketing (it isn't a js framework.. It compiles to js..) is not saving them.
This is why the so called "open web" that locks you to a few legacy languages must be fought with. Transpilation is not an answer. Luckily mobile is thriving, no problems using F# with Xamarin as a first-class citizen
I don't really think requiring commercial licensing for closed source projects is really a con. Seems like a logical way to make money, yet still allow open source projects to benefit.
Its true that its difficult to build an working magical all-around wrapper, but the core parts can be replaced well. HTML+JS+HTTP is open to be LightwightMarkupLanguage + SupportedLanguage + NetworkWrapper, e.g. Markdown+Haskell+WAI .
This looks super interesting. I don't think I've ever seen anything like it.
At first I thought it was similar to Classic ASP or JSPs, but after looking at some the examples, it's more like a JS framework in that it generates HTML dynamically with client side code. But, the thing that really looks cool to me is the interop between client and server that you can do.
You can use the exact same "type Person = {Name:string; DOB:DateTime;}" on the server and client. That's about as DRY as you can get, I think.
It's a F#-to-JS compiler, a UI framework, and an RPC system all built into one. Script# is similar, for C#, but I don't think it got that far? MS did start "Project Volta" IIRC but then gave up on it. There's also FunScript: http://funscript.info/ but that seems more focused only on the JS generation part.
I don't know why Micrsoft doesn't buy these guys and deliver this as a core solution. I'd guess it's because it's not on C#, and MS marketing doesn't know what to do with F#. They want to pigeonhole it as "F# is a special language for like, scientists and stuff. Don't worry, it ain't got nothing on C#." And hey, with enough time and resources, C# may catch up on some of the things. With Rosyln, I think it'd be easier to make a C# WebSharper thing.
That reminds me strongly of what the Ocsigen[1] project has been doing for years: Eliom as a web framework that generates both server and client side code via js_of_ocaml.
Unfortunately, it kinda suffers from a not so shiny website, cluttered documentation and high complexity. I kinda dream of those things being solved, then it would be a really appealing option.
Is this an arms length Jetbrains thing? If not, it seems awfully odd that its name is so close to Resharper and the parent company is called IntelliFactory, which is so close to IntelliJ. I guess there's nothing wrong with that. Just odd.
Ignoring, of course, that (a) they've probably used or heard of ReSharper and (b), both F# and C# pronounce the hash as "sharp"? ;-) I suppose it could be confusing but it wasn't the first thing I thought of...
They're either related to Jetbrains in some way or really lack creativity or maybe they're trying to unduly profit off the good reputation Jetbrains generally has in the community.
Exactly what I thought when I saw xSharper then Intellix. First thing I did was look to see if JetBrains had anything to do with it since that would have +1'd my interest. Quickly realizing they didn't -1'd it :/
WebSharper is really fantastic. F#'s a great language, and not having to leave it and deal with JavaScript is a great boon. So many problems simply disappear due to type checking.
This looks very interesting in the same way as Clojurescript but with F# and potentially a smoother experience.
Has anyone used this that can provide some insight into it? Does it work with entity framework? OWIN? What's the story with the F# to javascript compilation; did they invent that or is it another project? Who are these people?
I think it's a shame that the C#/.NET ecosystem can't seem to have FOSS nice things because it really hampers stuff gaining traction. However I find the open source license for this is very clear and generous; I still can't seem to figure out if ServiceStack is safe to use :| This should allow for learning the framework and providing nice things to the community, and then the licensing seems reasonable compared to the value proposition for working on commercial software.
I've been using WebSharper in production for 20 months now and I wouldn't consider doing web development any other way.
People have mentionned that such abstraction generally become more trouble then they are worth but I completely disagree.
In particular the question would be what are the corner cases that will make the abstraction more difficult to use and ruin your overall productivity and I haven't found anything so far.
What I find difficult though isn't creating wrappers around existing external javascript libraries but rather learning the quirks of each of them. For instance, I happen to maintain a WebSharper wrapper around the Kendo Web library (see here https://github.com/davidgrenier/Kendo) with the goal of abstracting away the complexity from my code base and where I spend most of my time is trying to figure out how to properly use any new control we've yet to use in production. This process is tedious and error prone because the examples on the Kendo website aren't exhaustive, the documentation isn't specific about the semantics of the library and just the brittle nature of javascript development. I spend lots of time in the chrome debugger and their online tool figuring out how things work. The productivity gain from isolating that from my code base is significant.
F# as a language is quite understated, more companies are using it than it seems (many of which in stealth mode) and so is the case for WebSharper. IntelliFactory has been selling licences to many of their closed-source clients, my employer being an example but also I'm aware that MSR uses it internally on a few projects and was told the developpers there love it. The fact that my employer continues to pay the licence, gives me work on the project and has recently hired another developer working full time with WebSharper indicates that they consider the value to be at least on par with everything else we do.
Over the 3+ years I've been using WebSharper, I've had to report only a single bug Monday of last week (see here https://bitbucket.org/IntelliFactory/websharper/issue/288/sy...) in the WebSharper core libraries related with compatibility issue in old version of IE and the bug was fixed within the week and had access to an updated WebSharper package from nuget.
WebSharper isn't just an F# to JavaScript compiler, they also offer powerful, paper-worthy abstractions to improve developer productivity:
-Transparent RPC calls from client to server (combined with static typing this is one of my preferred feature).
-Combinators for composing pages and managing routes in an elegant typesafe way.
-The ability to create standard server-side markup and yet SPA page building is even better as you get to pick what you carry over the wire and simply create all your markup on the client.
-Tools to create extensions around external javascript libraries (I've personally used WIG and works really well and I learned a few things about design while using it to boot).
-If you have access to Libraries that offer TypeScript bindings (like Kendo does) IntelliFactory can generate the wrappers for you.
-Tons of precreated wrapper for you to simply use
-Combinators to compose data/UI controls/event flow handling like Formlets/Piglets and now UI.Next which is excellent, I've come to appreciate all three and we're using Piglets in production though UI.Next should go a long way to allow you to do anything you need.
-Use existing abstractions in the standard F# development experience which would be hard to get otherwise (async workflows is an example).
I don't have strong opinions one way or another on licencing but as been mentionned before IntelliFactory generates revenues and as such I'd be skeptical of someone claiming that such and such model "doesn't work". Besides most of the concerns I've seen here seems philosophical rather than about direct impediments the licencing creates on what they had to do. Indeed the licencing cost my employer has to be is insignificant compared to the benefits and I personally do not pay for a licence on my own stuff.
Microsoft's position around the .NET ecosystem is sound, they provide the CLR, Base Library and a world class development environment. The rest is open to the community to drive the libraries/toolset they need, after all Microsoft can't do everything and it seems to me would tie in the community to Microsoft. You can see the latest open sourcing of the Roslyn compiler as a reflection of that. Likewise, the F# compiler service project and the direction taken by the F# Power Tools and the way Microsoft supports this initiative to enhance the VS development experience sends the same message. Speaking with Don Syme he indicated that technically there wouldn't be anything standing in the way of doing the equivalent of what IntelliFactory did with the new C# compiler, though you can be sure of two things: Microsoft won't be doing it and it's likely a tremendous amount of work.
I haven't played with any other similar toolset (ClojureScript/Purescript/GWT comes to mind) and as such I will not comment on those. But I will advise against listening to advice from anyone who hasn't used any of those specific libary. Even better, sit down and spend the time required to make it familiar and then you'll be a better judge.
If you are already using F#, I urge you to put 10-20 hours on it, you will thank yourself. If you aren't using F#, in my mind, WebSharper is just another wonderful reason to start doing so.
Thanks for taking the time to write up such a detailed comment. I was working on one of my own as I have had nothing but a great experience with Websharper and was disappointed to see the tool be somewhat dismissed by (to me) unfounded and unproven technical and license concerns.
I'm using the tool to develop the web front end for a MVP idea. Combined with Xamarin it means I can use F# across my entire application stack. This means reusing the same types, domain models, and so on. Plus you get all the goodies of Async, computation expressions and strong typing on the web client.
I went straight to the new UI.Next reactive framework and have been loving the experience to build a SPA. Imagine Om/React but strongly typed with monadic combinators to compose reactive views.
I use WebSharper at MSR and have been very happy with the results. We have substantial amounts of F# for simulation, modelling, and analysis of biological systems. It’s useful to be able to run this code in many places and WebSharper allows us to transpile into JavaScript for running directly in a browser with only minor changes to the core code.
Disclosure: I work at Microsoft Research but not on F# and have ongoing interactions with folks at Intellifactory
By what measure has GWT failed? It compares favorably with usage numbers to most popular JS frameworks. 130,000 monthly active developers, used on 20,000+ domains, outside of Google, it's used by many large companies, for example, Apple's iAds uses GWT, AWS console uses GWT, major financial institutions and banks are using it.
It has it's niche just like every other framework. Google is now using it to share code between Web, Android, iOS, and Server (shared client side business logic). Google Sheets is the newest example of such Hybrid apps, and the gains are substantial, 60-70% code sharing between platforms, only the UI needs to be reimplemented natively.
Just because something is not monopolizing a particular area of development doesn't mean it's "failed". The ecosystem is large number for many different frameworks to remain vibrant.
Another monolithic framework that will likely catch some unsuspecting CTO or director and ultimately be his demise, or someone who doesn't want to learn javascript (such people still exist, sadly).
Nobody really "wants" to learn JS. It's a hateful little language and the sooner it gets nuked from orbit or at least abstracted away to become merely the "assembly language of the web", the better.
While I don't agree WebSharper is monolithic - it's anything but that. I do agree that it is a bear trap. They could go bust at any moment and leave you with a big headache.
Even as a F# dev I have deliberately avoided using it because yes I agree with some of the sentiment here that the licensing model is a bit odd, but also the thought of needing to write a Binding for basically any JS library it doesn't support out of the box is quite a burden that will never go away. And can really slow down a new project that wants to iterate fast.
I firmly believe in using the best tools for the job at hand. So that means a F# back-end and a AngularJS front-end. It's a PITA maintaining two domain models in each, and similar validation logic etc, but such is life sometimes. What I lose in the domain model side, I gain back in a rich and vibrant set of available AngularJS modules and JS libraries.
It's a substantially nicer language than Javascript, and there's a lot of problem domains that are far easier solved in it.
People wouldn't use it because they don't want to learn Javascript. They'd use it because they don't want to use Javascript, on account of knowing better.
Yes, but can you believe there exist people who think using just a few legacy ill-designed languages negating the years of progress is not just OK but dare to call this approach "open" as in "open web"?
That's interesting. I appear to have actually accidentally written a chunk of this in C# for a product a couple of years back. The approach is pretty much identical.
WebSharper is completely agnostic in this regard, so the question boils down to what is available for F#.
The idiomatic way to deal with databases is using one of the available type providers. Basically, a TP generates types at compile time, in a way that actually plays quite nicely with IntelliSense [1]. In the case of db TPs, they're parameterized by a connection string and connect to the db to extract the schema and generate the appropriate types. Several exist [2]; SqlDataConnection and SqlEntityConnection are built-in, FSharp.Data.SqlClient and FSharp.Data.SqlProvider are community contributed. They all use query expressions (basically, F#'s extensible version of LINQ syntax) except SqlClient which directly uses SQL in a string (but still checks the query at compile time and passes arguments cleanly, thanks to the TP) and is therefore more like a (safer) micro-ORM.
The project is really great, however license is really bad. A modern framework, should be open source under liberal license. Licenses like this worked in 90s, but currently they don't work.
If you don't like the license, don't use the framework. It's that simple. Charging for commercial licenses for libraries is a perfectly valid business strategy, and I can see lots of F# developers paying for this.
[+] [-] macca321|11 years ago|reply
Abstracting away web development and http has been tried again and again, and always ends up being more hassle than plain ol' HTML+JS+HTTP.
Then you've limited yourself to interop with the js libraries they've provided leaky wrappers over, or you can write your own leaky wrapper if you want to use coolnewthing.js you saw on github.
And to cap it all, this framework requires commercial licensing for closed source projects!
[+] [-] MichaelGG|11 years ago|reply
The other benefit is that I can use all the same type definitions, so I don't need to write some generator or wrapper around my XHR functions - it just works.
It's quite easy to just drop out into pure JS if you feel the need. And defining wrappers is actually very very simple. For example:
Doesn't Google use a Java-based system to do essentially the same thing (GWT)?But you're right that if you are already happy with JS then there's a lot less reason to pick it up.
[+] [-] cromwellian|11 years ago|reply
For example, using similar techniques that html5index.org uses, all browser native APIs are automatically covered by fetching the latest WebIDL definitions from Chromium or Firefox's repository or via standards docs, and used to generate the interfaces.
Or, using IDE FileWatchers, we use the Closure Compiler to read in Javascript libraries and/or externs, infer types, and write out interfaces. Likewise, we'll be able to read in typescript library interfaces and generate Java interfaces.
Combining the new JsInterop system, Java8, and SuperDevMode's <1 second compiles, the new system eliminates wrappers, reduces Java boilerplate overhead (lambdas, method references), and provides fast refresh times.
[+] [-] cordite|11 years ago|reply
[+] [-] _random_|11 years ago|reply
[+] [-] zastrowm|11 years ago|reply
[+] [-] Vektorweg|11 years ago|reply
[+] [-] gagege|11 years ago|reply
At first I thought it was similar to Classic ASP or JSPs, but after looking at some the examples, it's more like a JS framework in that it generates HTML dynamically with client side code. But, the thing that really looks cool to me is the interop between client and server that you can do.
You can use the exact same "type Person = {Name:string; DOB:DateTime;}" on the server and client. That's about as DRY as you can get, I think.
[+] [-] MichaelGG|11 years ago|reply
I don't know why Micrsoft doesn't buy these guys and deliver this as a core solution. I'd guess it's because it's not on C#, and MS marketing doesn't know what to do with F#. They want to pigeonhole it as "F# is a special language for like, scientists and stuff. Don't worry, it ain't got nothing on C#." And hey, with enough time and resources, C# may catch up on some of the things. With Rosyln, I think it'd be easier to make a C# WebSharper thing.
[+] [-] LeonidasXIV|11 years ago|reply
Unfortunately, it kinda suffers from a not so shiny website, cluttered documentation and high complexity. I kinda dream of those things being solved, then it would be a really appealing option.
[1] http://ocsigen.org/
[+] [-] nickknw|11 years ago|reply
[1] - http://elm-lang.org/
[+] [-] zem|11 years ago|reply
[+] [-] n72|11 years ago|reply
[+] [-] lstamour|11 years ago|reply
[+] [-] purpletoned|11 years ago|reply
[+] [-] kgwxd|11 years ago|reply
[+] [-] MichaelGG|11 years ago|reply
[+] [-] superfunc|11 years ago|reply
[+] [-] Rapzid|11 years ago|reply
Has anyone used this that can provide some insight into it? Does it work with entity framework? OWIN? What's the story with the F# to javascript compilation; did they invent that or is it another project? Who are these people?
I think it's a shame that the C#/.NET ecosystem can't seem to have FOSS nice things because it really hampers stuff gaining traction. However I find the open source license for this is very clear and generous; I still can't seem to figure out if ServiceStack is safe to use :| This should allow for learning the framework and providing nice things to the community, and then the licensing seems reasonable compared to the value proposition for working on commercial software.
[+] [-] tarmil|11 years ago|reply
"OWIN?" -> It can, with WebSharper.WebAPI [1].
"What's the story with the F# to javascript compilation; did they invent that or is it another project?" -> It's an in-house developed compiler.
"Who are these people?" -> A Hungarian company called IntelliFactory.
(full disclosure, I work at IntelliFactory.)
[1] https://github.com/intellifactory/websharper.webapi
[+] [-] DennisP|11 years ago|reply
Agree on FOSS. It's nice this company will license to me for opensource projects, but what happens if they go out of business?
[+] [-] davidgrenier|11 years ago|reply
People have mentionned that such abstraction generally become more trouble then they are worth but I completely disagree.
In particular the question would be what are the corner cases that will make the abstraction more difficult to use and ruin your overall productivity and I haven't found anything so far.
What I find difficult though isn't creating wrappers around existing external javascript libraries but rather learning the quirks of each of them. For instance, I happen to maintain a WebSharper wrapper around the Kendo Web library (see here https://github.com/davidgrenier/Kendo) with the goal of abstracting away the complexity from my code base and where I spend most of my time is trying to figure out how to properly use any new control we've yet to use in production. This process is tedious and error prone because the examples on the Kendo website aren't exhaustive, the documentation isn't specific about the semantics of the library and just the brittle nature of javascript development. I spend lots of time in the chrome debugger and their online tool figuring out how things work. The productivity gain from isolating that from my code base is significant.
F# as a language is quite understated, more companies are using it than it seems (many of which in stealth mode) and so is the case for WebSharper. IntelliFactory has been selling licences to many of their closed-source clients, my employer being an example but also I'm aware that MSR uses it internally on a few projects and was told the developpers there love it. The fact that my employer continues to pay the licence, gives me work on the project and has recently hired another developer working full time with WebSharper indicates that they consider the value to be at least on par with everything else we do.
Over the 3+ years I've been using WebSharper, I've had to report only a single bug Monday of last week (see here https://bitbucket.org/IntelliFactory/websharper/issue/288/sy...) in the WebSharper core libraries related with compatibility issue in old version of IE and the bug was fixed within the week and had access to an updated WebSharper package from nuget.
WebSharper isn't just an F# to JavaScript compiler, they also offer powerful, paper-worthy abstractions to improve developer productivity:
-Transparent RPC calls from client to server (combined with static typing this is one of my preferred feature).
-Combinators for composing pages and managing routes in an elegant typesafe way.
-The ability to create standard server-side markup and yet SPA page building is even better as you get to pick what you carry over the wire and simply create all your markup on the client.
-Tools to create extensions around external javascript libraries (I've personally used WIG and works really well and I learned a few things about design while using it to boot).
-If you have access to Libraries that offer TypeScript bindings (like Kendo does) IntelliFactory can generate the wrappers for you.
-Tons of precreated wrapper for you to simply use
-Combinators to compose data/UI controls/event flow handling like Formlets/Piglets and now UI.Next which is excellent, I've come to appreciate all three and we're using Piglets in production though UI.Next should go a long way to allow you to do anything you need.
-Use existing abstractions in the standard F# development experience which would be hard to get otherwise (async workflows is an example).
I don't have strong opinions one way or another on licencing but as been mentionned before IntelliFactory generates revenues and as such I'd be skeptical of someone claiming that such and such model "doesn't work". Besides most of the concerns I've seen here seems philosophical rather than about direct impediments the licencing creates on what they had to do. Indeed the licencing cost my employer has to be is insignificant compared to the benefits and I personally do not pay for a licence on my own stuff.
Microsoft's position around the .NET ecosystem is sound, they provide the CLR, Base Library and a world class development environment. The rest is open to the community to drive the libraries/toolset they need, after all Microsoft can't do everything and it seems to me would tie in the community to Microsoft. You can see the latest open sourcing of the Roslyn compiler as a reflection of that. Likewise, the F# compiler service project and the direction taken by the F# Power Tools and the way Microsoft supports this initiative to enhance the VS development experience sends the same message. Speaking with Don Syme he indicated that technically there wouldn't be anything standing in the way of doing the equivalent of what IntelliFactory did with the new C# compiler, though you can be sure of two things: Microsoft won't be doing it and it's likely a tremendous amount of work.
I haven't played with any other similar toolset (ClojureScript/Purescript/GWT comes to mind) and as such I will not comment on those. But I will advise against listening to advice from anyone who hasn't used any of those specific libary. Even better, sit down and spend the time required to make it familiar and then you'll be a better judge.
If you are already using F#, I urge you to put 10-20 hours on it, you will thank yourself. If you aren't using F#, in my mind, WebSharper is just another wonderful reason to start doing so.
[+] [-] mands|11 years ago|reply
I'm using the tool to develop the web front end for a MVP idea. Combined with Xamarin it means I can use F# across my entire application stack. This means reusing the same types, domain models, and so on. Plus you get all the goodies of Async, computation expressions and strong typing on the web client.
I went straight to the new UI.Next reactive framework and have been loving the experience to build a SPA. Imagine Om/React but strongly typed with monadic combinators to compose reactive views.
I guess this is a long way of saying 'second' :)
[+] [-] cgravill|11 years ago|reply
Disclosure: I work at Microsoft Research but not on F# and have ongoing interactions with folks at Intellifactory
[+] [-] weichi|11 years ago|reply
And what is the state of F# on Linux these days?
[+] [-] Ixiaus|11 years ago|reply
[+] [-] zzen|11 years ago|reply
Apart, obviously, in language of choice.
[+] [-] cromwellian|11 years ago|reply
It has it's niche just like every other framework. Google is now using it to share code between Web, Android, iOS, and Server (shared client side business logic). Google Sheets is the newest example of such Hybrid apps, and the gains are substantial, 60-70% code sharing between platforms, only the UI needs to be reimplemented natively.
Just because something is not monopolizing a particular area of development doesn't mean it's "failed". The ecosystem is large number for many different frameworks to remain vibrant.
[+] [-] ianlevesque|11 years ago|reply
[+] [-] hderms|11 years ago|reply
[+] [-] iamleppert|11 years ago|reply
[+] [-] nbevans|11 years ago|reply
While I don't agree WebSharper is monolithic - it's anything but that. I do agree that it is a bear trap. They could go bust at any moment and leave you with a big headache.
Even as a F# dev I have deliberately avoided using it because yes I agree with some of the sentiment here that the licensing model is a bit odd, but also the thought of needing to write a Binding for basically any JS library it doesn't support out of the box is quite a burden that will never go away. And can really slow down a new project that wants to iterate fast.
I firmly believe in using the best tools for the job at hand. So that means a F# back-end and a AngularJS front-end. It's a PITA maintaining two domain models in each, and similar validation logic etc, but such is life sometimes. What I lose in the domain model side, I gain back in a rich and vibrant set of available AngularJS modules and JS libraries.
[+] [-] zoomerang|11 years ago|reply
It's a substantially nicer language than Javascript, and there's a lot of problem domains that are far easier solved in it.
People wouldn't use it because they don't want to learn Javascript. They'd use it because they don't want to use Javascript, on account of knowing better.
[+] [-] _random_|11 years ago|reply
[+] [-] RichardFord|11 years ago|reply
[+] [-] sudowhodoido|11 years ago|reply
[+] [-] zackmorgs|11 years ago|reply
[deleted]
[+] [-] hamxiaoz|11 years ago|reply
[+] [-] JosephRedfern|11 years ago|reply
[+] [-] theoutlander|11 years ago|reply
[+] [-] shamney|11 years ago|reply
[+] [-] tarmil|11 years ago|reply
The idiomatic way to deal with databases is using one of the available type providers. Basically, a TP generates types at compile time, in a way that actually plays quite nicely with IntelliSense [1]. In the case of db TPs, they're parameterized by a connection string and connect to the db to extract the schema and generate the appropriate types. Several exist [2]; SqlDataConnection and SqlEntityConnection are built-in, FSharp.Data.SqlClient and FSharp.Data.SqlProvider are community contributed. They all use query expressions (basically, F#'s extensible version of LINQ syntax) except SqlClient which directly uses SQL in a string (but still checks the query at compile time and passes arguments cleanly, thanks to the TP) and is therefore more like a (safer) micro-ORM.
[1]: http://msdn.microsoft.com/en-us/library/hh156509.aspx [2]: http://fsharp.org/guides/data-access/
[+] [-] solomatov|11 years ago|reply
[+] [-] e12e|11 years ago|reply
What am I missing?
[1] https://github.com/intellifactory/websharper/blob/master/LIC...
[+] [-] FraaJad|11 years ago|reply
[+] [-] RussianCow|11 years ago|reply