81 lines
3 KiB
Racket
81 lines
3 KiB
Racket
#lang scribble/manual
|
|
|
|
@(require (for-label (only-in typed/racket require/typed require/typed/provide))
|
|
(for-label (only-in graph (graph? g:graph?)))
|
|
(for-label typed/graph))
|
|
|
|
@title{Typed Interface for the Generic Graph Library}
|
|
|
|
@author[@author+email["Sergiu Ivanov" "sivanov@colimite.fr"]]
|
|
|
|
@defmodule[typed/graph]
|
|
|
|
This library provides an incomplete typed interface to the
|
|
@hyperlink["https://docs.racket-lang.org/graph/index.html"]{generic graph
|
|
library}. The following parts are @bold{not currently covered}:
|
|
|
|
@itemlist[
|
|
@item{generic graph interface,}
|
|
@item{generic queues (from the package @racket[gen-queue-lib]),}
|
|
@item{macros.}
|
|
]
|
|
|
|
I may work on adding these in the future, but it is low priority for me as of
|
|
2021-12-21. Feel free to contribute!
|
|
|
|
@section{Bug reporting}
|
|
|
|
If you find a bug, first try running your code directly with the graph library,
|
|
in untyped Racket. If the bug persists, you should probably report it to the
|
|
maintainer of the graph library directly. If unsure, report the bug to me.
|
|
|
|
@section{Contributing}
|
|
|
|
As of 2021, GitHub is owned by Microsoft, so I prefer keeping this library on
|
|
a different platform.
|
|
|
|
Do feel free to submit patches to me by E-mail: I will try my best to review
|
|
and apply them within a reasonable time frame. More details on contributing in
|
|
the
|
|
@hyperlink["https://git.marvid.fr/scolobb/typed-graph/src/branch/master/README.md#submitting-patches"]{README}.
|
|
|
|
@section{Technical details}
|
|
|
|
Typed Racket includes very useful primitives @racket[require/typed] and
|
|
@racket[require/typed/provide]. However, we cannot use this technique with the
|
|
graph library. The solution which works consists in wrapping the opaque graph
|
|
structure into another structure, which will therefore be a uniform container
|
|
for all kinds of graph implementations provided by the library.
|
|
|
|
This solution comes from Alex Knauth's answer
|
|
@hyperlink["https://stackoverflow.com/a/65416020"]{answer on Stack Overflow}.
|
|
This page also contains a technical explanation of the issue.
|
|
|
|
@section{Exported types}
|
|
|
|
This section lists the types this library gives to re-exported functions.
|
|
The subsections correspond to the sections of the documentation of the generic
|
|
graph library.
|
|
|
|
@defidform[Graph]{
|
|
|
|
The opaque type corresponding to the predicate @racketlink[g:graph? "graph?"].
|
|
|
|
}
|
|
|
|
@subsection{Generic Graph Interface}
|
|
@defproc[(has-vertex? [g Graph] [v Any]) Boolean]{}
|
|
|
|
|
|
@section{License}
|
|
|
|
Like the generic graph library, this library is licensed under the Apache
|
|
License, Version 2.0 (the "License"); you may not use this file except in
|
|
compliance with the License. You may obtain a copy of the License at
|
|
|
|
@hyperlink["http://www.apache.org/licenses/LICENSE-2.0"]{http://www.apache.org/licenses/LICENSE-2.0}
|
|
|
|
Unless required by applicable law or agreed to in writing, software distributed
|
|
under the License is distributed on an @bold{"as is" basis, without warranties
|
|
or conditions of any kind}, either express or implied. See the License for the
|
|
specific language governing permissions and limitations under the License.
|