# System map — gcanti/fp-ts

> Canonical page: https://codevetter.com/unpack/fp-ts/system-map

# System map — gcanti/fp-ts

Scanned commit c0a6472121c67a2b083e62fcff13e7d022e39d8f (2026-04-20). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The inspected system is a library whose consumers import functions and instance dictionaries. Its runtime representations use tagged objects, ordinary collections, and functions; higher-kinded types connect these representations at compile time. Package assembly produces two JavaScript module formats and declarations, with special handling for HKT identity. Repository tooling provides linting, runtime tests, type assertions, documentation generation, and publication.
- package.json identifies version 2.16.11 and exposes lib/index.js, es6/index.js, and lib/index.d.ts; it declares sideEffects:false, while the getting-started guide explicitly describes a library without runtime dependencies. — [package.json#L2-L8](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/package.json#L2-L8) [docs/guides/getting-started.md#L24-L28](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/docs/guides/getting-started.md#L24-L28)
- src/index.ts is a namespace barrel importing modules such as Option, Either, IO, TaskEither, and ReaderTaskEither; its exported names include lowercase namespaces and aliases for reserved words. — [src/index.ts#L29-L58](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/index.ts#L29-L58) [src/index.ts#L69-L85](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/index.ts#L69-L85) [src/index.ts#L628-L643](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/index.ts#L628-L643) [src/index.ts#L693-L719](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/index.ts#L693-L719)
- HKT.ts defines HKT through HKT4, open URItoKind dictionaries, URI key unions, and Kind projections; Option and Either register their concrete types through module augmentation. — [src/HKT.ts#L11-L38](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/HKT.ts#L11-L38) [src/HKT.ts#L49-L70](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/HKT.ts#L49-L70) [src/HKT.ts#L80-L126](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/HKT.ts#L80-L126) [src/Option.ts#L235-L247](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/Option.ts#L235-L247)
- Runtime boundaries are explicit: IO<A> is () => A, Task<A> is () => Promise<A>, and TaskEither<E,A> extends Task<Either<E,A>>. — [src/IO.ts#L40-L42](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/IO.ts#L40-L42) [src/Task.ts#L45-L47](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/Task.ts#L45-L47) [src/TaskEither.ts#L70-L77](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/TaskEither.ts#L70-L77)
- ReaderTaskEither receives a caller-supplied environment and returns a TaskEither; State receives state and returns [value,state], while IORef stores a private mutable value in an object. — [src/ReaderTaskEither.ts#L84-L86](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/ReaderTaskEither.ts#L84-L86) [src/State.ts#L24-L26](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/State.ts#L24-L26) [src/IORef.ts#L18-L42](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/src/IORef.ts#L18-L42)
- npm run build compiles CommonJS and ES modules before executing scripts/build.ts; that script copies package metadata and documentation, generates module manifests, then fixes HKT paths. — [package.json#L15-L18](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/package.json#L15-L18) [tsconfig.build.json#L1-L7](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/tsconfig.build.json#L1-L7) [tsconfig.build-es6.json#L1-L7](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/tsconfig.build-es6.json#L1-L7) [scripts/build.ts#L99-L111](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/scripts/build.ts#L99-L111)
- The configured npm test chain runs ESLint, Prettier, dtslint, Vitest, and docs-ts; GitHub Actions installs dependencies, builds, and runs that chain on Ubuntu with Node 20.12.2. — [package.json#L10-L27](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/package.json#L10-L27) [.github/workflows/main.yml#L12-L28](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/.github/workflows/main.yml#L12-L28)
- Documentation uses docs-ts with src/internal.ts excluded and a Just the Docs site configuration; release executes npm publish from dist, while the root prepublishOnly script deliberately fails. — [docs-ts.json#L1-L3](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/docs-ts.json#L1-L3) [docs/_config.yml#L1-L13](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/docs/_config.yml#L1-L13) [scripts/release.ts#L22-L26](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/scripts/release.ts#L22-L26) [scripts/pre-publish.ts#L1-L6](https://github.com/gcanti/fp-ts/blob/c0a6472121c67a2b083e62fcff13e7d022e39d8f/scripts/pre-publish.ts#L1-L6)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
