Open the imported Cabal file ↗
- author
- Simon Marlow
- bug-reports
- https://github.com/simonmar/async/issues
- build-type
- Simple
- cabal-version
- >=1.10
- category
- Concurrency
- copyright
- (c) Simon Marlow 2012
- extra-source-files
- changelog.md bench/race.hs
- homepage
- https://github.com/simonmar/async
- license
- BSD3
- license-file
- LICENSE
- maintainer
- Simon Marlow <marlowsd@gmail.com>
- name
- async
- synopsis
- Run IO operations asynchronously and wait for their results
- tested-with
- GHC == 9.14.1 GHC == 9.12.2 GHC == 9.10.3 GHC == 9.8.4 GHC == 9.6.7 GHC == 9.4.8 GHC == 9.2.8 GHC == 9.0.2 GHC == 8.10.7 GHC == 8.8.4 GHC == 8.6.5 GHC == 8.4.4 GHC == 8.2.2 GHC == 8.0.2
- version
- 2.2.6
Show the complete metadata as JSON
{
"schemaVersion": 1,
"name": "async",
"version": "2.2.6",
"cabalVersion": "1.10",
"buildType": "Simple",
"fields": {
"author": [
"Simon Marlow"
],
"bug-reports": [
"https://github.com/simonmar/async/issues"
],
"build-type": [
"Simple"
],
"cabal-version": [
">=1.10"
],
"category": [
"Concurrency"
],
"copyright": [
"(c) Simon Marlow 2012"
],
"description": [
"This package provides a higher-level interface over\nthreads, in which an @Async a@ is a concurrent\nthread that will eventually deliver a value of\ntype @a@. The package provides ways to create\n@Async@ computations, wait for their results, and\ncancel them.\n.\nUsing @Async@ is safer than using threads in two\nways:\n.\n* When waiting for a thread to return a result,\nif the thread dies with an exception then the\ncaller must either re-throw the exception\n('wait') or handle it ('waitCatch'); the\nexception cannot be ignored.\n.\n* The API makes it possible to build a tree of\nthreads that are automatically killed when\ntheir parent dies (see 'withAsync')."
],
"extra-source-files": [
"changelog.md\nbench/race.hs"
],
"homepage": [
"https://github.com/simonmar/async"
],
"license": [
"BSD3"
],
"license-file": [
"LICENSE"
],
"maintainer": [
"Simon Marlow <marlowsd@gmail.com>"
],
"name": [
"async"
],
"synopsis": [
"Run IO operations asynchronously and wait for their results"
],
"tested-with": [
"GHC == 9.14.1\nGHC == 9.12.2\nGHC == 9.10.3\nGHC == 9.8.4\nGHC == 9.6.7\nGHC == 9.4.8\nGHC == 9.2.8\nGHC == 9.0.2\nGHC == 8.10.7\nGHC == 8.8.4\nGHC == 8.6.5\nGHC == 8.4.4\nGHC == 8.2.2\nGHC == 8.0.2"
],
"version": [
"2.2.6"
]
},
"components": [
{
"kind": "library",
"name": "main",
"tree": {
"data": {
"buildable": null,
"exposedModules": [
"Control.Concurrent.Async",
"Control.Concurrent.Async.Internal",
"Control.Concurrent.Async.Warden",
"Control.Concurrent.Stream"
],
"otherModules": [],
"dependencies": [
{
"package": "base",
"range": ">=4.3 && <4.23",
"libraries": [
"main"
]
},
{
"package": "hashable",
"range": ">=1.1.2.0 && <1.6",
"libraries": [
"main"
]
},
{
"package": "stm",
"range": ">=2.2 && <2.6",
"libraries": [
"main"
]
},
{
"package": "unordered-containers",
"range": ">=0.2 && <0.3",
"libraries": [
"main"
]
}
],
"fields": {}
},
"branches": [
{
"condition": {
"compiler": "ghc",
"range": ">=7.1"
},
"then": {
"data": {
"buildable": null,
"exposedModules": [],
"otherModules": [],
"dependencies": [],
"fields": {}
},
"branches": []
},
"else": null
},
{
"condition": {
"flag": "debug-auto-label"
},
"then": {
"data": {
"buildable": null,
"exposedModules": [],
"otherModules": [],
"dependencies": [],
"fields": {}
},
"branches": []
},
"else": null
}
]
}
},
{
"kind": "test-suite",
"name": "test-async",
"tree": {
"data": {
"buildable": null,
"exposedModules": [],
"otherModules": [],
"dependencies": [
{
"package": "base",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "test-framework",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "test-framework-hunit",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "HUnit",
"range": "-any",
"libraries": [
"main"
]
}
],
"fields": {
"type": [
"exitcode-stdio-1.0"
]
}
},
"branches": []
}
},
{
"kind": "executable",
"name": "concasync",
"tree": {
"data": {
"buildable": null,
"exposedModules": [],
"otherModules": [],
"dependencies": [
{
"package": "base",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
]
}
],
"fields": {}
},
"branches": [
{
"condition": {
"not": {
"flag": "bench"
}
},
"then": {
"data": {
"buildable": false,
"exposedModules": [],
"otherModules": [],
"dependencies": [],
"fields": {}
},
"branches": []
},
"else": null
}
]
}
},
{
"kind": "executable",
"name": "conccancel",
"tree": {
"data": {
"buildable": null,
"exposedModules": [],
"otherModules": [],
"dependencies": [
{
"package": "base",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
]
}
],
"fields": {}
},
"branches": [
{
"condition": {
"not": {
"flag": "bench"
}
},
"then": {
"data": {
"buildable": false,
"exposedModules": [],
"otherModules": [],
"dependencies": [],
"fields": {}
},
"branches": []
},
"else": null
}
]
}
},
{
"kind": "executable",
"name": "race",
"tree": {
"data": {
"buildable": null,
"exposedModules": [],
"otherModules": [],
"dependencies": [
{
"package": "base",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
]
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
]
}
],
"fields": {}
},
"branches": [
{
"condition": {
"not": {
"flag": "bench"
}
},
"then": {
"data": {
"buildable": false,
"exposedModules": [],
"otherModules": [],
"dependencies": [],
"fields": {}
},
"branches": []
},
"else": null
}
]
}
}
],
"setupDependencies": [],
"flags": [
{
"name": "debug-auto-label",
"default": false,
"manual": true,
"description": "Strictly for debugging as it might have a non-negligible overhead.\nEnabling this flag will auto-label the threads spawned by @async@. Use it to\nfind where are unlabelled threads spawned in your program (be it your code or\ndependency code)."
},
{
"name": "bench",
"default": false,
"manual": false,
"description": ""
}
],
"sourceRepositories": [
{
"kind": "head",
"fields": {
"location": [
"https://github.com/simonmar/async.git"
],
"type": [
"git"
]
}
}
],
"warnings": [],
"sourceUrl": "https://hackage.haskell.org/package/async-2.2.6/async.cabal",
"sha256": "45d5587d8a348a7e2b3f04de963fe633db49b49cde10ca1e6f834bef3baecee9",
"importedAt": "2026-10-14T12:51:31.929Z",
"dependencies": [
{
"package": "base",
"range": ">=4.3 && <4.23",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "hashable",
"range": ">=1.1.2.0 && <1.6",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "stm",
"range": ">=2.2 && <2.6",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "unordered-containers",
"range": ">=0.2 && <0.3",
"libraries": [
"main"
],
"component": "library:main",
"conditions": []
},
{
"package": "base",
"range": "-any",
"libraries": [
"main"
],
"component": "test-suite:test-async",
"conditions": []
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
],
"component": "test-suite:test-async",
"conditions": []
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
],
"component": "test-suite:test-async",
"conditions": []
},
{
"package": "test-framework",
"range": "-any",
"libraries": [
"main"
],
"component": "test-suite:test-async",
"conditions": []
},
{
"package": "test-framework-hunit",
"range": "-any",
"libraries": [
"main"
],
"component": "test-suite:test-async",
"conditions": []
},
{
"package": "HUnit",
"range": "-any",
"libraries": [
"main"
],
"component": "test-suite:test-async",
"conditions": []
},
{
"package": "base",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:concasync",
"conditions": []
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:concasync",
"conditions": []
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:concasync",
"conditions": []
},
{
"package": "base",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:conccancel",
"conditions": []
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:conccancel",
"conditions": []
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:conccancel",
"conditions": []
},
{
"package": "base",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:race",
"conditions": []
},
{
"package": "async",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:race",
"conditions": []
},
{
"package": "stm",
"range": "-any",
"libraries": [
"main"
],
"component": "executable:race",
"conditions": []
}
],
"exposedModules": [
"Control.Concurrent.Async",
"Control.Concurrent.Async.Internal",
"Control.Concurrent.Async.Warden",
"Control.Concurrent.Stream"
],
"documents": {
"readme": {
"status": "missing",
"sha256": null,
"error": null,
"checkedAt": "2026-10-14T12:51:32.537Z"
},
"changelog": {
"status": "available",
"sha256": "3d30ab5f3fd37e429b558a044f944ae88076a0d4b20c1c13425e5809777ecaa6",
"error": null,
"checkedAt": "2026-10-14T12:51:32.712Z"
}
},
"documentation": {
"id": "e1ec72e9c05cbab38776488b66048a880d53bba143fc9ed13634357cfdaae7a9",
"plan_id": "9dceb39db9fe0a6bbc04e9e92905ab4873d87d3205faab844ad80b63840899a1",
"provenance": "community",
"diagnostics": 0,
"created_at": 1791985075
},
"versions": [
{
"version": "2.2.6",
"imported_at": "2026-10-14T12:51:31.929Z"
}
]
}