membrain: Type-safe memory units

[ library, memory, mpl, safe ] [ Propose Tags ]

membrain provides newtype wrapper for type-safe work with memory units

newtype Memory (mem :: Nat) = Memory
    { unMemory :: Natural
    }

This data type stores memory unit value phantom type parameter which is represented as type-level natural number. The ideas behind this package are described in the following blog post:


[Skip to Readme]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.0.0.0, 0.0.0.1, 0.0.0.2
Change log CHANGELOG.md
Dependencies base (>=4.10.1.0 && <4.15) [details]
License MPL-2.0
Copyright 2018-2020 Kowainik
Author Veronika Romashkina, Dmitrii Kovanikov
Maintainer Kowainik <xrom.xkov@gmail.com>
Revised Revision 1 made by vrom911 at 2020-06-03T10:26:35Z
Category Memory, Safe
Home page https://github.com/kowainik/membrain
Bug tracker https://github.com/kowainik/membrain/issues
Source repo head: git clone https://github.com/kowainik/membrain.git
Uploaded by vrom911 at 2020-05-11T09:28:17Z
Distributions NixOS:0.0.0.2
Downloads 837 total (2 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for membrain-0.0.0.2

[back to package description]

membrain

memory-brain GitHub CI Hackage Stackage Lts Stackage Nightly MPL-2.0 license

"People think dreams aren't real just because they aren't made of matter, of particles. Dreams are real. But they are made of viewpoints, of images, of memories and puns and lost hopes."

― Neil Gaiman

This package implements type-safe memory units. It pursues the following goals:

  1. Focus on correctness.
  2. Low amount of boilerplate should be required to use the library.

The ideas behind this package are described in the following blog post:

The library is built around the following data type:

newtype Memory (mem :: Nat) = Memory
    { unMemory :: Natural
    }

This data type stores every memory internally as bits. However, unit multiplier is stored as type-level natural number. This approach allows to represent different units and implement instances for them with low amount of boilerplate.

membrain implements various useful functions to work with Memory:

  1. Smart constructors.
  2. Conversion functions.
  3. Pretty displaying.
  4. Dependently-typed parsing.
  5. Numeric functions.
  6. Type-safe wrappers around functions from base.

Acknowledgement

Icons made by Kiranshastry from Flaticon is licensed by CC 3.0 BY.