64 lines
2.5 KiB
Racket
64 lines
2.5 KiB
Racket
#lang scribble/manual
|
|
|
|
@(require (for-label (only-in typed/racket require/typed require/typed/provide)))
|
|
|
|
@title{Typed Interface for the Generic Graph Library}
|
|
|
|
@author[@author+email["Sergiu Ivanov" "sivanov@colimite.fr"]]
|
|
|
|
@defmodule[typed/graph]
|
|
|
|
This module provides a typed interface to the
|
|
@hyperlink["https://docs.racket-lang.org/graph/index.html"]{generic graph
|
|
library}.
|
|
|
|
This module is currently @bold{work in progress} and multiple planned features
|
|
may still be missing.
|
|
|
|
Here is a list of features present in the untyped library, but @emph{absent
|
|
from the typed interface}:
|
|
|
|
@itemlist[@item{the generic interface,}]
|
|
@itemlist[@item{vertex and edge properties.}]
|
|
|
|
@bold{TODO:} List the functions which the library currently exports.
|
|
|
|
@section{Bug reporting}
|
|
|
|
When encountering a bug, please strip the type annotations and try the
|
|
resulting code with the generic graph library, without this interface. If you
|
|
can reproduce the bug, then you should probably report it to the maintainer of
|
|
the graph library directly. If not or if unsure, feel free to report it 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.
|
|
|
|
@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{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.
|