RethinkDb.Driver.FSharp/README.md

70 lines
2.0 KiB
Markdown
Raw Normal View History

2017-07-15 13:05:37 +00:00
# RethinkDb.Driver.FSharp
Idiomatic F# extensions for the C# RethinkDB driver
2017-07-17 01:18:47 +00:00
## Licensing
While no specific additional license restrictions exist for this project, there are modifications to the Apache v2
license on this project's dependencies. Please see [the heading on the C# driver page][license] for details.
## Using
It is still early days on this project; however, AppVeyor CI provides a [NuGet feed][nuget] that builds packages for
each commit.
## Goals
The goal is to provide:
- A composable pipeline for creating ReQL statements:
```fsharp
/// string -> (IConnection -> Task<Post>)
2017-07-17 01:18:47 +00:00
let fetchPost (postId : string) =
fromDb "Blog"
|> table "Post"
|> get postId
|> runResult<Post>
|> withRetryDefault
2017-07-17 01:18:47 +00:00
```
- An F# domain-specific language (DSL) using a `rethink` computation expression:
```fsharp
/// string -> (IConnection -> Task<Post>)
2017-07-17 01:18:47 +00:00
let fetchPost (postId : string) =
rethink<Post> {
withTableInDb "Post" "Blog"
get postId
result
withRetryDefault
2017-07-17 01:18:47 +00:00
}
```
- A standard way to translate JSON into a strongly-typed configuration:
```fsharp
/// type: DataConfig
let config = DataConfig.fromJsonFile "data-config.json"
/// type: IConnection
let conn = config.Connect ()
/// type: Post (utilizing either example above)
let post = fetchPost "the-post-id" conn |> Async.RunSynchronously
```
- Only rename functions/methods where required
```fsharp
// Function names cannot be polymorphic the way object-oriented methods can, so filter's three overloads become
filter (r.HashMap ("age", 30))
2017-07-17 01:18:47 +00:00
// and
filterFunc (fun row -> row.["age"].Eq(30))
// and
filterJS "function (row) { return 30 == row['age'] }"
```
The composable pipeline and the JSON configuration are the early goals, as the computation expression will utilize the
same composition as those functions.
[license]: https://github.com/bchavez/RethinkDb.Driver#open-source-and-commercial-licensing
[nuget]: https://ci.appveyor.com/nuget/danieljsummers-rethinkdb-driver-fsharp