-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
21 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,17 @@ | ||
# The Power of Traits in `Vcs` | ||
|
||
The `Vcs` library leverages the `provider`-based parametric model to offer a | ||
flexible and adaptable interface for Git interaction. This model, also used in | ||
the `Eio` library (`Eio.Resource`), allows us to define small scopes of | ||
functionality, or `Traits`, within the `Vcs` library. | ||
The `Vcs` library leverages the `provider`-based parametric model to offer a flexible and adaptable interface for Git operations. This model, also used in the `Eio` library (`Eio.Resource`), allows us to define small scopes of functionality, or `Traits`, within the `Vcs` library. | ||
|
||
## Experience with `providers` | ||
|
||
Our use of the [provider](https://github.com/mbarbin/provider) based parametric | ||
library in `Vcs` serves as a practical, real-world case study of this pattern. | ||
Our use of the [provider](https://github.com/mbarbin/provider) based parametric library in `Vcs` serves as a practical, real-world case study of this pattern. | ||
|
||
We aim to bring this pattern to the attention of the community, fostering a | ||
general understanding that can be applied to other projects using the same | ||
pattern. In essence, understanding the parametrized model of `Vcs` equates to | ||
understanding `Eio.Resource`, and vice versa. | ||
We aim to bring this pattern to the attention of the community, fostering a general understanding that can be applied to other projects using the same pattern. In essence, understanding the parametrized model of `Vcs` equates to understanding `Eio.Resource`, and vice versa. | ||
|
||
## Granularity of the Interface via Trait Granularity | ||
|
||
The `Trait` design of `provider` allows us to define specific and isolated | ||
sub-functionalities within the `Vcs` library. This granularity enables different | ||
providers to choose which `Trait` they wish to implement, offering a level of | ||
flexibility not possible with a monolithic functor. | ||
The `Trait` design of `provider` allows us to define specific and isolated sub-functionalities within the `Vcs` library. This granularity enables different providers to choose which `Trait` they wish to implement, offering a level of flexibility not possible with a monolithic functor. | ||
|
||
With `Traits`, you can select a provider with the specific set of traits you | ||
need, without changing any other code. As explained | ||
[here](https://mbarbin.github.io/provider/provider/Provider/Interface/index.html#type-t), | ||
provider interfaces come with some notion of phantom types, offering additional | ||
compiler assistance. | ||
With `Traits`, you can select a provider with the specific set of traits you need, without changing any other code. As explained [here](https://mbarbin.github.io/provider/provider/Provider/Interface/index.html#type-t), provider interfaces come with some notion of phantom types, offering additional compiler assistance. | ||
|
||
In summary, the use of `Traits` in `Vcs` provides a flexible, adaptable, and | ||
granular interface for Git interaction, promoting a broader understanding and | ||
application of the `provider`-based parametric model. | ||
In summary, the use of `Traits` in `Vcs` provides a flexible, adaptable, and granular interface for Git operations, promoting a broader understanding and application of the `provider`-based parametric model. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,13 @@ | ||
# Vcs examples | ||
|
||
In this directory we include some examples to illustrate how using `Vcs` looks | ||
like. | ||
In this directory we include some examples to illustrate how using `Vcs` looks like. | ||
|
||
Since there are several providers available (`Eio`, `Blocking`), we decided to | ||
select one main provider that most examples will use. We selected `Eio` for this. | ||
Since there are several providers available (`Eio`, `Blocking`), we decided to select one main provider that most examples will use. We selected `Eio` for this. | ||
|
||
The intended entry point to browse these examples is `hello_vcs.ml`. | ||
|
||
You can still have a look at `hello_blocking.ml` for an example showing how to | ||
use the blocking interface of vcs. | ||
You can still have a look at `hello_blocking.ml` for an example showing how to use the blocking interface of vcs. | ||
|
||
The examples in this directory are not meant to be exhaustive, or replace the | ||
tests that we have in other places in the repository. Rather they are intended | ||
to give you a quick feel for what's `Vcs` and how to use it. | ||
The examples in this directory are not meant to be exhaustive, or replace the tests that we have in other places in the repository. Rather they are intended to give you a quick feel for what's `Vcs` and how to use it. | ||
|
||
Welcome to Vcs' examples, and happy Giting! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,5 @@ | ||
# Vcs expect tests | ||
|
||
This directory contains functional tests for `Vcs` that combine functionalities | ||
from different libraries. | ||
This directory contains unit and functional tests for `Vcs` that combine functionalities from different libraries. | ||
|
||
They can be a useful addition to the dedicated unit tests located within each | ||
library's directory. | ||
They can be a useful addition to the dedicated unit tests located within each library's directory. |