# API glossary

Source: https://libtmux.org/en/haskell/latest/reference/glossary/

> Kinds, modifiers and package labels in the Haskell API reference.

## Symbol kinds

Kinds identify declarations in the Haskell API reference.

### module

A named Haskell module that imports and exports declarations.

A module qualifies names such as LibTmux.Id.parsePaneId. Documentation ownership by a data type does not add that type to the source name.

References: [Haskell modules](https://www.haskell.org/onlinereport/haskell2010/haskellch5.html).

### data type

A distinct Haskell type introduced by a data or newtype declaration.

An opaque Haddock data header exposes the type name without revealing whether its implementation uses data or newtype.

References: [Haskell datatype declarations](https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2).

### data constructor

A Haskell value constructor that builds one form of a data type.

Constructors can carry fields and appear in patterns. A qualified constructor takes its module name, not its data type name.

References: [Haskell algebraic datatypes](https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-690004.2.1).

### record field

A Haskell record label used in construction, update and pattern matching.

The qualified modules use NoFieldSelectors. Their exported record labels do not generate top-level selector functions.

References: [GHC field selectors](https://downloads.haskell.org/ghc/9.14.1/docs/users_guide/exts/field_selectors.html).

### function

A Haskell binding with a function type, applied to arguments by juxtaposition.

Arguments are curried. Acquisition and mutation require an explicit effect such as IO in the signature.

References: [Haskell function bindings](https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-830004.4.3).

## Modifiers

Modifiers add information about calling, implementing, or accessing a declaration. Their precise effect follows the language and the signature.

### opaque

A Haskell type exported without its data constructors.

Callers use exported operations rather than hidden constructors or representation. This does not establish whether the implementation uses data or newtype.

References: [Haskell abstract datatypes](https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-1150005.8).

## Package context

Package labels identify where an API is supplied.

### package

The Cabal package supplying these exposed Haskell modules.

A package name and a module name are different identities. Availability from source does not imply publication on Hackage.

References: [Cabal package descriptions](https://cabal.readthedocs.io/en/3.18/cabal-package-description-file.html).
