MyNixOS website logo
Description

Graph structure with type parameters for nodes and edges.

This graph structure is based on Data.Map and allows any Ord type for nodes and allows directed, undirected and more edge types. There is no need to map nodes to integer numbers. This makes handling in applications much more comfortable, thus the package name. This is especially useful for applications where there is no simple mapping of your node identifiers to integers or where the set of nodes is extended or reduced frequently. However, this flexibility comes with some costs. Since the structure is based on Data.Map.Maps, for efficient computing the node type should support fast comparison.

The edge type can be freely chosen. This allows great flexibility but it is a bit more cumbersome to do in Haskell 98. Examples of edge types:

  • DirEdge: Edges in a directed graph

  • UndirEdge: Edges in an undirected graph

  • EitherEdge: For graphs containing both directed and undirected edges

  • You may define an edge type with an additional identifier in order to support multiple edges between the same pair of nodes.

  • Using type functions with the node type as parameter you may even define an edge type for nodes from a Cartesian product, where only "horizontal" and "vertical" edges are allowed.

For examples see the linear-circuit package and its tests. The ResistorCube test demonstrates non-integer node types and the Tree test demonstrates multigraphs. Another application is cabal-sort.

Currently the package does not contain any advanced algorithm, just the data structure and some manipulation functions.

The package is plain Haskell 98.

Related packages:

  • fgl: standard package for graph processing with many graph algorithms but cumbersome data structure with Int numbered nodes

Metadata

Version

0.0.4

Maintainers (1)

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows