Open the imported Cabal file ↗
- author
- Roman Leshchinskiy <rl@cse.unsw.edu.au> Simon Meier <iridcode@gmail.com>
- build-type
- Simple
- cabal-version
- >=1.10
- category
- Data, System
- copyright
- (c) 2006-2008 by Roman Leshchinskiy (c) 2013-2014 by Simon Meier
- extra-source-files
- CHANGELOG.md
- homepage
- https://github.com/haskell-strict/strict
- license
- BSD3
- license-file
- LICENSE
- maintainer
- Don Stewart <dons@galois.com>, Bas van Dijk <v.dijk.bas@gmail.com>, Oleg Grenrus <oleg.grenrus@iki.fi>, Simon Meier <iridcode@gmail.com>, Ximin Luo <infinity0@pwned.gg>
- name
- strict
- synopsis
- Strict data types and String IO.
- tested-with
- GHC ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.6 || ==9.8.2 || ==9.10.1
- version
- 0.5.1
- x-revision
- 1
Show the complete metadata as JSON
{
"schemaVersion": 1,
"name": "strict",
"version": "0.5.1",
"cabalVersion": "1.10",
"buildType": "Simple",
"fields": {
"author": [
"Roman Leshchinskiy <rl@cse.unsw.edu.au>\nSimon Meier <iridcode@gmail.com>"
],
"build-type": [
"Simple"
],
"cabal-version": [
">=1.10"
],
"category": [
"Data, System"
],
"copyright": [
"(c) 2006-2008 by Roman Leshchinskiy\n(c) 2013-2014 by Simon Meier"
],
"description": [
"This package provides strict versions of some standard Haskell data\ntypes (pairs, Maybe and Either). It also contains strict IO operations.\n.\nIt is common knowledge that lazy datastructures can lead to space-leaks.\nThis problem is particularly prominent, when using lazy datastructures to\nstore the state of a long-running application in memory. One common\nsolution to this problem is to use @seq@ and its variants in every piece of\ncode that updates your state. However a much easier solution is to use\nfully strict types to store such state values. By \\\"fully strict types\\\" we\nmean types for whose values it holds that, if they are in weak-head normal\nform, then they are also in normal form. Intuitively, this means that\nvalues of fully strict types cannot contain unevaluated thunks.\n.\nTo define a fully strict datatype, one typically uses the following recipe.\n.\n1. Make all fields of every constructor strict; i.e., add a bang to\nall fields.\n.\n2. Use only strict types for the fields of the constructors.\n.\nThe second requirement is problematic as it rules out the use of\nthe standard Haskell 'Maybe', 'Either', and pair types. This library\nsolves this problem by providing strict variants of these types and their\ncorresponding standard support functions and type-class instances.\n.\nNote that this library does currently not provide fully strict lists.\nThey can be added if they are really required. However, in many cases one\nprobably wants to use unboxed or strict boxed vectors from the 'vector'\nlibrary (<http://hackage.haskell.org/package/vector>) instead of strict\nlists. Moreover, instead of @String@s one probably wants to use strict\n@Text@ values from the @text@ library\n(<http://hackage.haskell.org/package/text>).\n.\nThis library comes with batteries included; i.e., mirror functions and\ninstances of the lazy versions in @base@. It also includes instances for\ntype-classes from the @deepseq@, @binary@, and @hashable@ packages."
],
"extra-source-files": [
"CHANGELOG.md"
],
"homepage": [
"https://github.com/haskell-strict/strict"
],
"license": [
"BSD3"
],
"license-file": [
"LICENSE"
],
"maintainer": [
"Don Stewart <dons@galois.com>,\nBas van Dijk <v.dijk.bas@gmail.com>,\nOleg Grenrus <oleg.grenrus@iki.fi>,\nSimon Meier <iridcode@gmail.com>,\nXimin Luo <infinity0@pwned.gg>"
],
"name": [
"strict"
],
"synopsis": [
"Strict data types and String IO."
],
"tested-with": [
"GHC ==8.6.5\n|| ==8.8.4\n|| ==8.10.7\n|| ==9.0.2\n|| ==9.2.8\n|| ==9.4.8\n|| ==9.6.6\n|| ==9.8.2\n|| ==9.10.1"
],
"version": [
"0.5.1"
],
"x-revision": [
"1"
]
},
"components": [
{
"kind": "library",
"name": "main",
"tree": {
"data": {
"buildable": null,
"exposedModules": [
"Data.Strict",
"Data.Strict.Classes",
"Data.Strict.Either",
"Data.Strict.Maybe",
"Data.Strict.These",
"Data.Strict.Tuple",
"System.IO.Strict"
],
"otherModules": [],
"dependencies": [
{
"package": "assoc",
"range": ">=1.1.1 && <1.2",
"libraries": [
"main"
]
},
{
"package": "base",
"range": ">=4.12.0.0 && <5",
"libraries": [
"main"
]
},
{
"package": "binary",
"range": ">=0.8.6.0 && <0.9",
"libraries": [
"main"
]
},
{
"package": "bytestring",
"range": ">=0.10.8.2 && <0.13",
"libraries": [
"main"
]
},
{
"package": "deepseq",
"range": ">=1.4.4.0 && <1.6",
"libraries": [
"main"
]
},
{
"package": "ghc-prim",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "hashable",
"range": ">=1.4.7.0 && <1.6",
"libraries": [
"main"
]
},
{
"package": "text",
"range": ">=1.2.3.1 && <1.3 || >=2.0 && <2.2",
"libraries": [
"main"
]
},
{
"package": "these",
"range": ">=1.2.1 && <1.3",
"libraries": [
"main"
]
},
{
"package": "transformers",
"range": ">=0.5.6.2 && <0.7",
"libraries": [
"main"
]
}
],
"fields": {}
},
"branches": []
}
}
],
"setupDependencies": [],
"flags": [],
"sourceRepositories": [],
"warnings": [],
"sourceUrl": "https://hackage.haskell.org/package/strict-0.5.1/strict.cabal",
"sha256": "58c373b7c7748cbb4a5a6c8c15073f99a1c10a9a9bb6894ac33f43a5cdb901f2",
"importedAt": "2026-10-14T12:49:24.770Z",
"dependencies": [
{
"package": "assoc",
"range": ">=1.1.1 && <1.2",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "base",
"range": ">=4.12.0.0 && <5",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "binary",
"range": ">=0.8.6.0 && <0.9",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "bytestring",
"range": ">=0.10.8.2 && <0.13",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "deepseq",
"range": ">=1.4.4.0 && <1.6",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "ghc-prim",
"range": "-any",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "hashable",
"range": ">=1.4.7.0 && <1.6",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "text",
"range": ">=1.2.3.1 && <1.3 || >=2.0 && <2.2",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "these",
"range": ">=1.2.1 && <1.3",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "transformers",
"range": ">=0.5.6.2 && <0.7",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
}
],
"exposedModules": [
"Data.Strict",
"Data.Strict.Classes",
"Data.Strict.Either",
"Data.Strict.Maybe",
"Data.Strict.These",
"Data.Strict.Tuple",
"System.IO.Strict"
],
"documents": {
"readme": {
"status": "missing",
"sha256": null,
"error": null,
"checkedAt": "2026-10-14T12:49:25.410Z"
},
"changelog": {
"status": "available",
"sha256": "8b05fe31cad738eca0beb8aaea5f727f3392865279ced40662c357b0f0cdf483",
"error": null,
"checkedAt": "2026-10-14T12:49:25.717Z"
}
},
"documentation": null,
"versions": [
{
"version": "0.5.1",
"imported_at": "2026-10-14T12:49:24.770Z"
}
]
}