{"size": 554, "ext": "scrbl", "max_stars_repo_path": "scribblings/protocol.scrbl", "max_stars_repo_name": "sabjohnso/protocol", "max_stars_repo_stars_event_min_datetime": null, "max_stars_repo_stars_event_max_datetime": null, "max_issues_repo_path": "scribblings/protocol.scrbl", "max_issues_repo_name": "sabjohnso/protocol", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "scribblings/protocol.scrbl", "max_forks_repo_name": "sabjohnso/protocol", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": null, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 27.7, "max_line_length": 68, "alphanum_fraction": 0.7924187726}
#lang scribble/manual
@require[@for-label[protocol racket/base]]

@title{protocol}
@author{Samuel B. Johnson}

@defmodule[protocol]

A protocol system that is conceptually similar to Haskell's Type
Classes or Racket's racket/generic library, but also, significantly
different through the decoupling of the protocols and argument types
or predicates. There are a number of built-in protocols that cover a
wide range of common use cases.

@include-section["built-in.scrbl"]

@include-section["create.scrbl"]

@include-section["technical-background.scrbl"]
